Node經常使用模塊簡介

Node經常使用模塊簡介

在學習開發node過程當中,會發現node不只本身內置了至關多的工具模塊,還有更多的第三方應用模塊,若是你瞭解了這些模塊的功能,在node的天空中就猶如插上了翅膀,所以本片文章將簡要介紹一些模塊的基本功能,供您快速瞭解每一個模塊的大概功能:前端

fs

(file system)文件系統,該模塊提供了用於與文件系統進行交互的API,而且全部的文件操做都具備同步和異步的形式。node

異步讀取文件:jquery

const fs = require('fs')
fs.readFile('demo.txt','utf8',function(err,data){
    if(err){
        throw err;
    }
    console.log(data);
})

該方法第一個參數用於指定文件名;第二個參數指定字符編碼,若沒有指定則返回原始buffer;callback用戶返回讀取錯誤或內容,若正確讀取則err值爲null,data爲文件的內容。npm

同步讀取文件:promise

fs.readFileSync('demo.txt','utf8',function(err,data){
    
})

使用方法同異步形式,與fs.readFile類似。安全

fs還提供了文件流的讀寫操做,對於上傳下載超大文件時,能夠對文件進行流的讀取寫入操做,bash

let fs = require("fs");

let readStream = fs.createReadStream("./demo.js"); 

let writeStream = fs.createWriteStream("demodemo.js");

//監聽文件流打開關閉
readStream.once('open', () => {
    console.log('readstream opened');
})

readStream.once('clos', () => {
    console.log('readstream closed');
})

writeStream.once('open', () => {
    console.log('writeStream opened');
})

writeStream.once('clos', () => {
    console.log('writeStream closed');
})

//讀入流操做
readStream.on('data', (data) => {
    console.log(data);        //<Buffer more bytes>
    //文件過大時分段讀取
    //寫入
    writeStream.write(data);
})

path

路徑模塊提供了一些實用工具,用於處理文件和目錄路徑。服務器

const path = require('path')

path.resolve方法會將路徑或路徑片斷的序列解析爲絕對路徑:app

path.resolve('./demo.txt');
//返回:c:\Users\Name\Desktop\promise\demo1.txt
path.resolve('./demo1.txt','./demo2.txt');
//返回:c:\Users\Name\Desktop\promise\demo1.txt\demo2.txt

path.join方法會將給定的path片斷連接到一塊兒,而後規範化生成路徑。異步

path.join(__dirname,'./demo.txt');
//c:\Users\Name\Desktop\promise\demo.txt

http

http模塊用於建立一個可以處理和響應http響應的服務

const http = require("http");

//建立一個http服務並監聽端口
http.createServer((request, response) => {
    //request請求對象
    //response響應對象
    response.end('hello world');
}).listen(3000);

http.get方法用於發起一個GET請求,並返回響應結果

http.get('http://www.baidu.com', (res) => {
  console.log(`Got response: ${res.statusCode}`);
  // consume response body
  res.resume();
});
//Got response: 200

GET方法在請求後自動調用res.end()

querystring

查詢字符串模塊,用於提供解析和格式化URL查詢字符串的工具。

querystirng.stringify用於將制定對象序列化

querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
//foo=bar&baz=qux&baz=quux&corge=

該方法會序列化string/number/boolean/[string]/[number]/[boolean]類型的值,其餘輸入的值都會被強制轉換爲空字符串。

querystring.parse方法用於解析URL查詢字符串爲鍵值對集合:

querystring.parse('foo=bar&abc=xyz&abc=123')
//{ foo: 'bar', abc: [ 'xyz', '123' ] }
注意:[Object: null prototype]

該方法返回的對象不是從原型繼承自Object,因此這個對象的一些方法如:obj.toString(),obj.hasOwnProperty()都不起做用。

cheerio

cheerio是jquery核心功能的一個快速靈活而又簡潔的實現,主要是爲了用在服務器端須要對DOM進行操做的地方。

const cheerio = require('cheerio');
const $ = cheerio.load('<body>...</body>');
$('ul.list li').each((index,item) => {
    let content = item.text();
    console.log(content)
})

首選須要加載HTML,在jquery中這一步是隱式操做的,使用cheerio時須要手動操做一下。而後就能夠像jquery同樣正常操做DOM結構了。

util

util模塊是一類一應俱全的模塊。它提供了實用函數來格式化字符串,將對象轉換爲字符串,檢查對象的類型,並執行對輸出流的同步寫入,以及一些對象繼承的加強。

util.format格式化字符串,第一個參數爲格式化字符串:

util.format('%s:%s', 'foo');
// 返回: 'foo:%s'
//%s用於轉化除BigInt,Object,-0之外的全部值

若沒有參數,則不進行替換

util.promisify能夠將一個node常見異步方法包裝成回調風格的函數,並返回一個promise對象

const readFile = util.promisify(fs.readFile);
readFile('./demo.txt','utf8').then((err,data) => {
    if(err) throw err;
    console.log(data);
}).catch(err => {
    //...
})

promisify的回調都會假定第一個參數爲錯誤對象,第二個參數爲正確結果,所以promisify只能格式化node的一些方法,如:fs.readFile,fs.writeFile等

util.inspect用於配置檢查對象

depth用於配置顯示對象的深度層級:

let obj = {
    l1: {
        l2: {
            name: 'apple'
        },
        l3: 'pear',
    }
};

console.log(util.inspect(obj,{depth:0}));
console.log(util.inspect(obj,{depth:1}));
//{ l1: [Object] }
//{ l1: { l2: [Object], l3: 'pear' } }

util.sorted設置爲true,則對象屬性名會進行排序,若是設置一個function比較函數,則將被調用於排序:

let obj = {
    name: 'Amy',
    age: 14,
    birth: 1992,
    sex: 'male'
};
let r1 = inspect(obj,{sorted: true});
let r2 = inspect(obj,{sorted: compare});
function compare(a,b){
    if(a >= b){
        return -1;
    }
}
console.log(r1);    //{ age: 14, birth: 1992, name: 'Amy', sex: 'male' }
console.log(r2);    //{ sex: 'male', name: 'Amy', birth: 1992, age: 14 }

crypto

該模塊提供了加密功能,包括 OpenSSL 的哈希、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。

const crypto = require('crypto')
const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
                   .update('I love you')
                   .digest('hex');
console.log(hash);
//a3d7754086d8e1d921cfc85cf4b22992698e3fbbc4b3610b782580d78b73b997

url

用於處理和解析URL。

url.parse用於解析一個url地址:

const url = require('url');
const myURL =
    url.parse('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash', true);
console.log(myURL);
// Url {
//     protocol: 'https:',
//     slashes: true,
//     auth: null,
//     host: 'www.iloveyou.com:8080',
//     port: '8080',
//     hostname: 'www.iloveyou.com',
//     hash: '#hash',
//     search: '?query=string',
//     query: [Object: null prototype] { query: 'string' },
//     pathname: '/p/a/t/h',
//     path: '/p/a/t/h?query=string',
//     href: 'https://www.iloveyou.com:8080/p/a/t/h?query=string#hash'
//   }

返回一個URL對象,用於描述該路徑的相關信息。

反過來,能夠根據一個對象生成一個地址url:

let res = url.format({   
  protocol: 'http:',   
  host: 'www.example.com',    
  pathname: '/p/a/t/h',    
  search: 'query=string'
});
console.log(res);        //https://www.iloveyou.com:8080/a/b/c/d?query=string

url.resolve還能夠用來拼接URL:

url.resolve('/a/b/c', 'd');  // /a/b/d
url.resolve('http://iloveyou.com/', '/one');    //http://iloveyou.com/one

將要解析的基本URL放到目標URL上,解決錨點標記href問題。

uuid

用於建立不一樣類型的uuid,

npm install uuid

UUID Version 1:基於時間的UUID
UUID Version 2:DCE安全的UUID
UUID Version 3:基於名字的UUID(MD5)
UUID Version 4:隨機UUID
UUID Version 5:基於名字的UUID(SHA1)

const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
let u1 = uuid.v1();
// let u2 = uuid.v2();  該方法未實現
let u3 = uuid.v3('hello.example.com', MY_NAMESPACE);
let u4 = uuid.v4();
let u5 = uuid.v5('hello.example.com', MY_NAMESPACE);

// dd7b8b80-c066-11ea-bf0f-8ff3a22b8c14
// f3d172e3-a128-3701-a2d0-3d38eac3b538
// bdbb54c2-aadc-4bf8-9b09-83a10219d19d
// 0c7ffc8d-5990-59b0-a870-cb70e59f183a

nodemon

node自動重啓工具,能夠用來監控node源代碼的任何變化,並自動重啓你的服務器,可使用npm來進行全局安裝。

npm install -g nodemon

使用時,在命令行中配置要運行的文件路徑便可:

nodemon ./server.js localhost 8080

同時還能夠配置主機名和端口

關注前端優選

還有哪些您想知道或推薦的模塊呢,歡迎下方留言,小編將擇期撰寫相關文章哦~

相關文章
相關標籤/搜索