博客 / 詳情

返回

【關於NodeJs】基礎筆記整理篇

終於開啓整理了最簡易版的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/ 來進行訪問")
})

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

六、搭建基於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...

user avatar peter-wilson 頭像 ivyzhang 頭像 dujing_5b7edb9db0b1c 頭像 zhangxishuo 頭像 suporka 頭像 tingzhong666 頭像
6 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.