最近一段時間工作不是很忙,抽空學習了一下node相關的知識,打算接下來學習一下VUE框架,配合VUE框架做一個小Demo。下面是小編總結的node中幾個常用的模塊。
Node中的模塊分爲三種類型:
- node天生自帶的模塊(核心模塊);
- node的第三方模塊;通過npm包管理器下載的模塊;
- 自定義模塊(即自己寫的js文件;在node環境中運行的js文件,一個文件就是一個模塊)。
模塊導入:
- require導入一個模塊;如果是同級的自定義模塊,必須加上‘./’;
- 如果文件的後綴名是.js、.json文件,那麼可以省略後綴名;
- Require這個方法不在全局的對象global中;
- Require導入的模塊會將模塊中的代碼從上到下執行。
模塊導出:(module.exports/exports)
- 把當前模塊中的內容進行暴露,讓其他模塊可以使用;
- Module.exports可以用其他的空間地址進行覆蓋;exports不能用其他的空間覆蓋,只能給其新增屬性;
- Module.exports不僅支持空間地址,還支持基本數據類型。
在每個自定義模塊的最外層,會默認添加一個閉包的函數,這個函數中會接收五個參數:
Exports:將當前模塊的屬性和方法導出;
__dirname:當前文件的父級目錄的絕對路徑;
__filename:當前文件的絕對路徑
(function (module,exports,require,__dirname,__filename){
})()
fs模塊
let fs = require(“fs”); // 引入模塊
fs.readFile(path,option,callback); // 異步讀取文件
// path:當前讀取文件的路徑
// option:讀出來數據的編碼格式
// callback:回調函數;該函數有兩個參數:第一個參數代表錯誤信息;如果沒有錯誤,那麼默認值是null;第二個參數是讀出來的數據,默認是undefined。
Fs.readFileSync(path,option); // 同步讀取文件;讀出來的數據默認是一個JSON格式的字符串;可以通過JSON.parse轉成數組
Fs.writeFile(path,data,option,callback); // 異步寫入文件;當異步寫入成功之後,執行這個回調;新的數據會將老的數據進行覆蓋
Fs.writeFileSync(path,data,option); // 同步寫入文件
Fs.appendFile(path,data,option,callback); // 向文件的末尾追加內容;如果文件路徑不存在,那麼會默認創建一個文件,並且把文件內容寫進去;會默認的調用toString方法,將其他的數據類型轉成字符串
http模塊
let http = require(‘http’);
let server = http.createServer(function(req,res){ // 請求一次,該函數執行一次
// req:請求信息;當客戶端請求時,會把當前請求的信息放入到這個參數中
// res:響應信息;
Console.log(req.path); // 這個是路徑
Console.log(req.path); // 這個是參數
Console.log(req.path); // 主機域名
Console.log(req.path); // 返回當前路徑的參數
Res.setHeader(‘Content-Type’,’text/plain;charset=utf-8’); // 設置響應頭,告訴瀏覽器按照什麼類型進行解析和渲染
res.end(‘this is a string’); // 1、結束當前請求;2、把後端整理的數據返回給客戶端,數據是字符串或者buffer類型的
}
// 端口號:0-65535; http默認端口號是80,HTTPS默認端口號是443
// 讓當前的服務監聽8000這個端口;當客戶端訪問8000端口時,會觸發當前server的回調函數;
Server.listen(8000,function(){
// 該回調函數只在端口成功啓動時執行一次,啓動失敗不執行
Console.log(‘端口啓動成功’);
});
Url模塊
let http = require(‘http’);
let url = require(‘url);
http.createServer(function(){
// url.parse:用來處理路徑的,pathname:當前的路徑;query:參數組合的對象
let {pathname,query} = url.parse(req.url,true);
}).listen(8000,function(){
Console.log(‘端口啓動成功’);
})
Mime模塊
Let mime = require(‘mime’);
let http = require(‘http’);
let url = require(‘url);
http.createServer(function(){
// url.parse:用來處理路徑的,pathname:當前的路徑;query:參數組合的對象
let {pathname,query} = url.parse(req.url,true);
// mime有個getType方法的返回值是當前文件對應的mime類型
// 解決了不同的文件類型設置不同的響應頭
res.setHeader(‘Content-Type’,mime.getType(pathname));
}).listen(8000,function(){
Console.log(‘端口啓動成功’);
})
常見的Mime類型
.html text/html
.css text/css
.txt text/plain
.js application/javascript
.json application/json
.png image/png
.jpg image/jpeg
Express模塊
Let express= require(‘express);
Let app = express(); // express執行相當於創建一個服務
App.get(‘/listen’,function(req,res){
Res.send(‘get’);
})
App.post(‘/listen2’,function(req,res){
Res.send(‘post);
})
App.all(‘/listen3’,function(req,res){
Res.send(‘all);
})
App.listen(8000,function(){
Console.log(‘端口啓動成功~’);
})
Node的優勢
- 基於V8引擎運行的環境,速度很快;
- 基於事件驅動和非阻塞I/O模型;非阻塞即代表異步;I/O模型:讀寫文件;
- 採用異步單線程開發;
- Npm包管理器,全球最大的開源生態系統
Node的優點
- 高性能:因爲避免了大量線程切換的開銷;當大負荷的情況下,內存消耗很少;一般用於做中間層;用來緩衝大量的請求給服務器帶來的壓力;
- Node的單線程,底層是多線程的;採用非阻塞I/O操作;
- Node的單線程保證了線程的絕對安全,避免了多線程改變同一個變量造成的線程崩潰
Node的缺點
如果其中一個請求發生錯誤,會導致整個服務崩潰。