1. 概述
- 介紹
Node.js
是一個基于Chrome V8
引擎的JavaScript
運行環(huán)境年缎。Node.js
使用了一個事件驅(qū)動住涉、非阻塞式I/O
的模型峻黍,使其輕量又高效旬渠。Node.js
的包管理器npm
甲献,是全球最大的開源庫生態(tài)系統(tǒng)撬即。 - 特點
- 使用
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])
- 開啟一個服務(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端口
- 返回
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
-
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 - 模塊
- 在
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)}`);
-
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
:pathname
和search
連在一起。
/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'