終於開啓整理了最簡易版的node筆記了。大佬能夠繞行啦啦啦~~javascript
Node.js是一個基於chrome V8引擎的js 運行環境,最大特色就是單線程運行,一次只能運行一個任務。使用了一個事件驅動、非阻塞式 I/O 的模>型。
安裝好node以後,基礎用法。html
$ node demo # 或者 $ node demo.js
$ node -e 'console.log("Hello World")' Hello World
REPL環境(Read–eval–print loop,"讀取-求值-輸出"循環),能夠直接運行各類JavaScript命令;前端
若是使用參數 –use_strict,則REPL將在嚴格模式下運行。java
進入REPL環境:node
退出REPL環境:control + dnode
$ node > a = 2; b=5; a+b 7
注意:node裏面沒有window和document。chrome
全局對象 | 說明 |
---|---|
global | 在node裏用var聲明 不會上升到global,即: var a=1;global.a >> undefined |
process | 該對象表示Node所處的當前進程 |
console | 提供命令行環境中的標準輸入、標準輸出功能 |
全局函數 | 說明 |
---|---|
setTimeout() | 定時器 |
clearTimeout() | 終止setTimeout定時器 |
setInterval() | 定時器 |
clearInterval() | 終止setInterval定時器 |
require() | 加載模塊 |
Buffer() | 操做二進制數據 |
全局變量 | 說明 |
---|---|
__dirname |
指向當前運行的腳本所在的目錄。 |
__filename |
指向當前運行的腳本文件名 |
Node.js採用模塊化結構,按照CommonJS規範定義和使用模塊。模塊與文件是一一對應關係,即加載一個模塊,實際上就是加載對應的一個模塊文件。express
模塊加載:npm
全部代碼都運行在模塊做用域,不會污染全局做用域;模塊能夠屢次加載,但只會在第一次加載的時候運行一次,而後運行結果就被緩存了,之後再加載,就直接讀取緩存結果;模塊的加載順序,按照代碼的出現順序是同步加載的;json
// 加載模塊一: require(路徑) #明確加載什麼模塊 var circle = require('./circle'); // circle.js文件的後綴可寫可不寫 // 加載模塊二: require(文件名) #在node_module直至找到 var bar = require('bar'); //至關於 var bar = require('bar/lib/bar.js')
模塊定義暴露:api
模塊內的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}`)
這些核心的功能模塊,安裝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}`) }) })
node的框架有不少[express 、koa 、sails 、loopback 、thinkjs 、egg]。能夠看看《關於nodejs的框架選擇》。
(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...