終於開啓整理了最簡易版的node筆記了。大佬可以繞行啦啦啦~~
一、前言介紹
Node.js是一個基於chrome V8引擎的js運行環境,最大特點就是單線程運行,一次只能運行一個任務。使用了一個事件驅動、非阻塞式 I/O 的模>型。
二、基礎用法
安裝好node之後,基礎用法。
1. node 腳本
$ node demo
# 或者
$ node demo.js
2. node -e 字符串
$ node -e 'console.log("Hello World")'
Hello World
3. 進入REPL環境使用
REPL環境(Read–eval–print loop,"讀取-求值-輸出"循環),可以直接運行各種JavaScript命令;
如果使用參數 –use_strict,則REPL將在嚴格模式下運行。
進入REPL環境:node
退出REPL環境:control + d
$ node
> a = 2; b=5; a+b
7
三、全局對象和全局變量
注意:node裏面沒有window和document。
| 全局對象 | 説明 |
|---|---|
| global | 在node裏用var聲明 不會上升到global,即: var a=1;global.a >> undefined |
| process | 該對象表示Node所處的當前進程 |
| console | 提供命令行環境中的標準輸入、標準輸出功能 |
| 全局函數 | 説明 |
|---|---|
| setTimeout() | 定時器 |
| clearTimeout() | 終止setTimeout定時器 |
| setInterval() | 定時器 |
| clearInterval() | 終止setInterval定時器 |
| require() | 加載模塊 |
| Buffer() | 操作二進制數據 |
| 全局變量 | 説明 |
|---|---|
__dirname |
指向當前運行的腳本所在的目錄。 |
__filename |
指向當前運行的腳本文件名 |
四、模塊化
1.模塊的加載 定義暴露 和使用
Node.js採用模塊化結構,按照CommonJS規範定義和使用模塊。模塊與文件是一一對應關係,即加載一個模塊,實際上就是加載對應的一個模塊文件。
模塊加載:
-
所有代碼都運行在模塊作用域,不會污染全局作用域;模塊可以多次加載,但只會在第一次加載的時候運行一次,然後運行結果就被緩存了,以後再加載,就直接讀取緩存結果;模塊的加載順序,按照代碼的出現順序是同步加載的;
// 加載模塊一: require(路徑) #明確加載什麼模塊 var circle = require('./circle'); // circle.js文件的後綴可寫可不寫 // 加載模塊二: require(文件名) #在node_module直至找到 var bar = require('bar'); //相當於 var bar = require('bar/lib/bar.js')
模塊定義暴露:
- 通過exports和modul.exports來暴露模塊中的內容。
-
模塊內的exports:為了方便,node為每個模塊提供一個exports變量,其指向module.exports,相當於在模塊頭部加了這句話:var exports = module.exports。在對外輸出時,可以給exports對象添加方法,PS:不能直接賦值(因為這樣就切斷了exports和module.exports的聯繫)
//module.exports 暴露 module.exports = { userName:"Jack", sayHello:function(){ return 'Hello' } } // exports.屬性 暴露 exports.sex = "boy"; exports.checkSex = function(){ return 'world' }
模塊使用:
-
//基於上面的示例 let user = require(文件名); console.log(`sex: ${user.sex}`)
2.自帶的核心模塊:
這些核心的功能模塊,安裝node的時候已經自帶了,不用另外安裝,直接require引入就可以使用。
| 模塊 | 説明 |
|---|---|
| http | 提供HTTP服務器功能 |
| url | 解析URL |
| fs | 文件系統交互 |
| util | 提供一系列實用小工具 |
| path | 處理文件路徑 |
| querystring | 解析URL的查詢字符串 |
| child\_process | 新建子進程 |
| crypto | 加密和解密對OpenSSL的包裝 |
| console | 控制枱 調試打印數據 |
| debugger | 調試器 |
五、搭建簡單服務
項目目錄
├── index.html //寫個簡單頁面
├── server.js //起服務demo
└── get.js //請求demo
server.js
let http = require('http'); //服務模塊
let url = require('url'); //解析請求頭模塊
let util = require('util'); //工具包模塊
let fs = require('fs'); //文件系統模塊
// createServer創建服務返回一個server
let server = http.createServer((req,res)=>{
let pathname = url.parse(req.url).pathname; //解析獲取pathname
console.log(`pathname: ${pathname.substring(1)}`);
fs.readFile(pathname.substring(1),(err,data)=>{
if(err){//錯誤時
res.writeHead(404,{
'Content-Type':'text/html'
})
}else{
res.writeHead(200,{
'Content-Type':'text/html'
})
res.write(data.toString());
}
// 響應結束 可傳參可不傳
res.end();
})
});
//監聽 (端口,主機,回調) 端口默認3000
server.listen(3000,"127.0.0.1",()=>{
console.log("服務器已經運行,請打開瀏覽器,輸入 http://127.0.0.1:3000/ 來進行訪問")
})
get.js
let http = require('http');
let util = require('util');
// 調用接口
http.get('http://www.baidu.com/sugrec?prod=pc&wd=%E8%8B%B9%E6%9E%9C',(res)=>{
let data = '';
// 監聽 不斷把數據累加
res.on("data",(chunk)=>{
data += chunk;
})
// 數據獲取完成時
res.on("end",()=>{
let result = JSON.parse(data);
console.log(`result:${util.inspect(result)}`); //打印全部返回數據
console.log(`result:${result.q}`)
})
})
六、搭建基於express框架運行環境
1.express框架介紹
node的框架有很多[express 、koa 、sails 、loopback 、thinkjs 、egg]。可以看看《關於nodejs的框架選擇》。
2.搭建
(1)安裝express generator生成器
# 沒裝過 先全局安裝
$ cnpm i -g express-generator
# 安裝後 查看版本
$ express --version
(2)通過生成器自動創建項目
//語法: $ express 項目名A //創建一個名叫A項目的文件夾並構建文件
$ express node1 //創建了node1文件夾,並有構建了很多的文件
其中看看bin下面的www 核心代碼:
package起服務的配置就是直接執行這個文件 "start": "node ./bin/www"
//創建一個server
var server = http.createServer(app);
//監聽
server.listen(port);
(3)進入項目 安裝依賴包 起服務
生成的配置文件有了package.json,但是還沒安裝過依賴包,所以先安裝 然後就可以執行起服務啦。
# 安裝依賴
$ npm install
# 啓動服務
$ npm start //對於start是可以省去run
//默認下 起服務成功 手動打開:http://127.0.0.1:3000/
(4) jade用不慣
jade從語法習慣上就和前端頁面習慣完全不相似,如果要用jade整個結構都得改,所以這也是很多人會不用jade而改用其他的原因。
你可以改用你熟悉的html,也可以用ejs。
ejs比html多了很多功能,且幾乎沒什麼學習成本,看看語法就能直接上手。EJS是一個簡單高效的模板語言,通過數據和模板,可以生成HTML標記文本。可以説EJS是一個JavaScript庫,EJS可以同時運行在客户端和服務器端,客户端安裝直接引入文件即可,服務器端用npm包安裝。
修改配置打開入口文件api.js,然後找app.set('view engine', 'jade’)
# 1.安裝ejs
$ npm i ejs -S
# 2.建立了對應的index.html 或index.ejs(匹配第三項的配置選擇)之類的文件
# 3.配置:
# 配置改成使用html的:
var ejs = require('ejs’);
//app.set('view engine', 'jade’);
//替換成:
app.engine('.html',ejs.__express);
app.set('view engine', 'html');
# 配置改成使用ejs的:
var ejs = require('ejs’);
//app.set('view engine', 'jade’);
//替換成:
app.set('view engine', 'ejs');
mark一下 僅供參考 歡迎更正補充 Thanks
參考資料:
官網:http://nodejs.cn/api/
express: https://www.npmjs.com/package...
ejs:https://www.npmjs.com/package...
阮一峯大佬:https://javascript.ruanyifeng...
node.js的歷史進程:https://baike.baidu.com/item/...
關於nodejs的框架選擇:https://www.jianshu.com/p/0e0...
node的until模塊:https://blog.csdn.net/qq_3926...