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》嗡兀可以選擇是否覆蓋默認的分割符('&')和分配符('=')恨锚。

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)系作者
  • 序言:七十年代末拧廊,一起剝皮案震驚了整個濱河市杂穷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卦绣,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飞蚓,死亡現(xiàn)場離奇詭異滤港,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門溅漾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來山叮,“玉大人,你說我怎么就攤上這事添履∑ň螅” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵暮胧,是天一觀的道長锐借。 經(jīng)常有香客問我,道長往衷,這世上最難降的妖魔是什么钞翔? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮席舍,結(jié)果婚禮上布轿,老公的妹妹穿的比我還像新娘。我一直安慰自己来颤,他們只是感情好汰扭,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著福铅,像睡著了一般萝毛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上本讥,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天珊泳,我揣著相機與錄音,去河邊找鬼拷沸。 笑死色查,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撞芍。 我是一名探鬼主播秧了,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼序无!你這毒婦竟也來了验毡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤帝嗡,失蹤者是張志新(化名)和其女友劉穎晶通,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哟玷,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡狮辽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喉脖。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡椰苟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出树叽,到底是詐尸還是另有隱情舆蝴,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布题诵,位于F島的核電站洁仗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仇轻。R本人自食惡果不足惜京痢,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篷店。 院中可真熱鬧祭椰,春花似錦、人聲如沸疲陕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹄殃。三九已至携茂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诅岩,已是汗流浹背讳苦。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吩谦,地道東北人鸳谜。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像式廷,于是被迫代替她去往敵國和親咐扭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容