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??梢赃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:pathname和search連在一起。
/p/a/t/h?query=string -
query: 查詢字符串中的參數(shù)部分(問號后面部分字符串)或者使用querystring.parse()解析后返回的對象
query=stringor{'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'