整理筆記: 關於Node.js篇

終於開啓整理了最簡易版的node筆記了。大佬能夠繞行啦啦啦~~javascript

1、前言介紹

Node.js是一個基於chrome V8引擎的js 運行環境,最大特色就是單線程運行,一次只能運行一個任務。使用了一個事件驅動、非阻塞式 I/O 的模>型。

2、基礎用法

安裝好node以後,基礎用法。html

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將在嚴格模式下運行。java

進入REPL環境:node
退出REPL環境:control + dnode

$ node
> a = 2; b=5; a+b
7

3、全局對象和全局變量

注意: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 指向當前運行的腳本文件名

4、模塊化

1.模塊的加載 定義暴露 和使用

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和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 調試器

5、搭建簡單服務

項目目錄

├── 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/ 來進行訪問")
})

image.png

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}`)
    })
})

image.png

6、搭建基於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文件夾,並有構建了不少的文件

image.png

其中看看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');

image.png

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...

相關文章
相關標籤/搜索