Node.js基礎(chǔ)與進階

1. 概述

  1. 介紹
    Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境。Node.js 使用了一個事件驅(qū)動、非阻塞式I/O 的模型,使其輕量又高效。 Node.js 的包管理器 npm,是全球最大的開源庫生態(tài)系統(tǒng)。
  2. 特點
  • 使用JavaScript作為開發(fā)語言
  • 基于ChromeV8引擎
  • 單線程
  • 事件驅(qū)動
  • 非阻塞的I/O

2. assert - 斷言

3. Buffer - 緩沖器

4. child_process - 子進程

5. cluster - 集群

6. console - 控制臺

7. crypto - 加密

8. dgram - 數(shù)據(jù)報

9. dns - 域名服務(wù)器

10. Error - 異常

11. events - 事件

12. fs - 文件系統(tǒng)

13. global - 全局變量

14. http - HTTP

一、http.request(options, callback)
這個函數(shù)允許后臺發(fā)布請求。
options可以是一個對象或一個字符串。如果options是一個字符串, 它將自動使用url.parse()解析。
二、http.get(options, callback)
因為大部分的請求是沒有報文體的GET請求,所以Node提供了這種便捷的方法。該方法與http.request()的唯一區(qū)別是它設(shè)置的是GET方法并自動調(diào)用req.end()。
三、http.createServer([options][, requestListener])

  1. 開啟一個服務(wù)
const http = require("http");
const url = require('url');
const util = require('util');

//事件驅(qū)動,回調(diào)在客戶端訪問該服務(wù)時觸發(fā)
var server = http.createServer((request, response) => {

  //打印url,這里只能取到相對路徑,不能拿到完整的url
  console.log(request.url);
  //將url字符串轉(zhuǎn)化為一個對象
  const urlObj = url.parse(request.url);
  //返回 object 的字符串表示,主要用于調(diào)試
  const urlObjStr = util.inspect(urlObj);


  response.writeHead(200, {"Content-Type": "text/plain; charset=utf-8"});
  response.write("Hello World\n");
  response.write(urlObjStr)
  response.end();
});

server.listen(8888, () => {
  console.log("服務(wù)器已經(jīng)啟動,請訪問 'http://127.0.0.1:8888'")
}); //服務(wù)監(jiān)聽8888端口
  1. 返回html文件
let http = require('http');
let url = require('url');
let util = require('util');
let fs = require('fs');

let server = http.createServer((req,res)=>{
  var pathname = url.parse(req.url).pathname;
  console.log("file:"+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();
  });
});

server.listen(8888,'127.0.0.1', ()=>{
  console.log("服務(wù)器已經(jīng)運行,請打開瀏覽,輸入:http://127.0.0.1:8888 來進行訪問.")
});

15. https - HTTPS

  1. get方法請求數(shù)據(jù)
let https = require('https');
let util = require('util')
https.get("https://m.imooc.com/api/search/searchword", function (res) {
    let data = '';
    res.on('data', function (chunk) {
        data += chunk;
    });
    res.on('end', function () {
        let result = JSON.parse(data);
        console.log("result:"+util.inspect(result))
    })
});

16. module - 模塊

  1. Node.js 模塊系統(tǒng)中,每個文件都被視為獨立的模塊。

circle.js 文件

const { PI } = Math;
exports.area = (r) => PI * r ** 2;
exports.circumference = (r) => 2 * PI * r;

foo.js文件

const circle = require('./circle.js');
console.log(`半徑為 4 的圓的面積是 ${circle.area(4)}`);
  1. module.exports屬性可以被賦予一個新的值。

square.js文件

// 賦值給 `exports` 不會修改模塊,必須使用 `module.exports`
module.exports = class Square {
  constructor(width) {
    this.width = width;
  }
  area() {
    return this.width ** 2;
  }
};

bar.js文件

onst Square  = require('./square.js');
const mySquare = new Square(2);
console.log(`mySquare 的面積是 ${mySquare.area()}`);

17. net - 網(wǎng)絡(luò)

18. os - 操作系統(tǒng)

19. path - 路徑

20. process - 進程

21. querystring - 查詢字符串

querystring 模塊提供了一些實用函數(shù),用于解析與格式化 URL查詢字符串。 可以通過以下方式使用:

const querystring = require('querystring');

一、 querystring.stringify(obj, [sep], [eq])
序列化一個對象到一個query string??梢赃x擇是否覆蓋默認的分割符('&')和分配符('=')。

querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')
//'foo:bar;baz:qux'

二、 querystring.parse(str, [sep], [eq], [options])
將一個 query string 反序列化為一個對象。可以選擇是否覆蓋默認的分割符('&')和分配符('=')。
options對象可能包含maxKeys屬性(默認為1000), 它可以用來限制處理過的鍵(key)的數(shù)量。設(shè)為0可以去除鍵(key)的數(shù)量限制。

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

三、 querystring.escape
querystring.stringify 使用的轉(zhuǎn)意函數(shù),在必要的時候可被重寫。
四、querystring.unescape
querystring.parse 使用的反轉(zhuǎn)意函數(shù),在必要的時候可被重寫。
注釋: 當(dāng)querystring.stringify()方法傳入的參數(shù)出現(xiàn)漢子時,會默認調(diào)用querystring.escape()方法對漢子進行轉(zhuǎn)義處理;當(dāng)querystring.parse()方法傳入的參數(shù)出現(xiàn)轉(zhuǎn)義之后的字符時,會默認調(diào)用querystring.unescape()方法對轉(zhuǎn)義字符進行反轉(zhuǎn)義處理。

22. readline - 逐行讀取

23. repl - 交互式解釋器

24. stream - 流

25. string_decoder - 字符串解碼器

26. timer - 定時器

27. tls - 安全傳輸層

28. tty - 終端

29. url - 網(wǎng)址

url 模塊提供了一些實用函數(shù),用于URL 處理與解析。 可以通過以下方式使用:

const url = require('url');

一、 url字段信息
例如: http://user:pass@host.com:8080/p/a/t/h?query=string#hash

  • protocol:請求協(xié)議,小寫
    http:
  • host: URL主機名已全部轉(zhuǎn)換成小寫, 包括端口信息
    'host.com:8080'
  • auth: URL中身份驗證信息部分
    user:pass
  • hostname: 主機的主機名部分, 已轉(zhuǎn)換成小寫
    host.com
  • port: 主機的端口號部分
    8080
  • pathname: URL的路徑部分,位于主機名之后請求查詢之前。
    /p/a/t/h
  • search: URL 的“查詢字符串”部分,包括開頭的問號
    ?query=string
  • path: pathnamesearch 連在一起。
    /p/a/t/h?query=string
  • query: 查詢字符串中的參數(shù)部分(問號后面部分字符串)或者使用querystring.parse() 解析后返回的對象
    query=string or {'query':'string'}
    *hash: URL 的 “#” 后面部分(包括 #符號)
    '#hash'
    注釋:①host = hostname + port;path = pathname + search;search = ? + query;

二、url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
輸入 URL 字符串,返回一個對象。
將第二個參數(shù)設(shè)置為 true 則使用 querystring 模塊來解析 URL中的查詢字符串部分,默認為false。
將第三個參數(shù)設(shè)置為 true 來把諸如//foo/bar這樣的URL解析為{ host: 'foo', pathname: '/bar' } 而不是 { pathname: '//foo/bar' }。 默認為false。
三、url.format(urlObj)
輸入一個URL 對象,返回格式化后的 URL字符串。
四、url.resolve(from, to)
以一種 Web 瀏覽器解析超鏈接的方式把一個目標(biāo) URL 解析成相對于一個基礎(chǔ) URL

const url = require('url');
url.resolve('/one/two/three', 'four');         
// '/one/two/four'
url.resolve('http://example.com/', '/one');    
// 'http://example.com/one'
url.resolve('http://example.com/one', '/two'); 
// 'http://example.com/two'

30. util - 實用工具

31. v8 - V8引擎

32. vm - 虛擬機

33. zlib - 壓縮

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容