• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Node常用模塊簡介

    標簽: python  java  nginx  js  http

    戳藍字"

    前端優選

    "

    關注我們哦

    在學習開發node過程中,會發現node不僅自己內置了相當多的工具模塊,還有更多的第三方應用模塊,如果你了解了這些模塊的功能,在node的天空中就猶如插上了翅膀,因此本片文章將簡要介紹一些模塊的基本功能,供您快速了解每個模塊的大概功能:

    fs

    (file system)文件系統,該模塊提供了用于與文件系統進行交互的API,并且所有的文件操作都具有同步和異步的形式。

    異步讀取文件:

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

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

    同步讀取文件:

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

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

    fs還提供了文件流的讀寫操作,對于上傳下載超大文件時,可以對文件進行流的讀取寫入操作,

    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方法會將路徑或路徑片段的序列解析為絕對路徑:

    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:[email protected]: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
    

    同時還可以配置主機名和端口

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

    點個在看,大家都看 

    版權聲明:本文為webyouxuan原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/webyouxuan/article/details/107551677

    智能推薦

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    猜你喜歡

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    19.vue中封裝echarts組件

    19.vue中封裝echarts組件 1.效果圖 2.echarts組件 3.使用組件 按照組件格式整理好數據格式 傳入組件 home.vue 4.接口返回數據格式...

    劍指Offer39-調整數組順序使奇數位于偶數前面

    一開始想著用冒泡排序的方法來做,但是bug還是很多,后來看了評論區答案,發現直接空間換時間是最簡單的,而且和快排的寫法是類似的。...

    【一只蒟蒻的刷題歷程】【藍橋杯】歷屆試題 九宮重排 (八數碼問題:BFS+集合set)

    資源限制 時間限制:1.0s 內存限制:256.0MB 問題描述 如下面第一個圖的九宮格中,放著 1~8 的數字卡片,還有一個格子空著。與空格子相鄰的格子中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。 我們把第一個圖的局面記為:12345678. 把第二個圖的局面記為:123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。 本題目的任務是已知九宮的初態...

    精品国产乱码久久久久久蜜桃不卡