HTTP模組是NodeJS自帶的核心模組,其用法簡單,只要建立一個伺服器,然後監聽埠,整個服務就跑起來啦
let http = require(`http`);
let server = http.createServer(function(req,res){
});
server.listen(8080);
複製程式碼
http模組createServer的callback中,
req(request)代表客戶端的資料,是一個可讀流;
res(response)代表服務端的資料,是一個可寫流;
你可以拿到你想要的資料:
let http = require(`http`);
let server = http.createServer();
server.on(`request`, function (req, res) {
let buffers = [];
req.on(`data`, function (data) {
buffers.push(data);
});
req.on(`end`, function () {
console.log(Buffer.concat(buffers).toString());
res.write(`hello node`);
res.end();
});
});
複製程式碼
request事件是監聽請求的事件,buffers是用來接收服務端發來的buffer資料,在end的時候console出來。res.write是可寫流的write事件,往客戶端寫資料。當然,在這裡我們並不能列印出來buffer因為還少一個請求頭部,接下來,我們用程式碼模擬一下http模組的工作原理,讓你一目瞭然。
服務端的程式碼和上段程式碼差不多,只是我們要接收到客戶端的資料後用請求頭部來判斷資料的格式
let http = require(`http`);
let queryString = require(`querystring`);
let server = http.createServer();
server.on(`request`, function (req, res) {
let contentType = req.headers[`content-type`];
let buffers = [];
req.on(`data`, function (chunk) {
buffers.push(chunk);
});
req.on(`end`, function () {
let content = Buffer.concat(buffers).toString()
if(contentType === `application/json`){
console.log(JSON.parse(content).name)
}else if(contentType === `application/x-www-form-urlencoded`){
console.log(queryString.parse(content).name)
}
res.end(`hello node`);
});
});
server.listen(8080);
複製程式碼
客戶端我們把所有請求的頭部資訊整理成一個json然後用response事件拿到客戶端的資料
let http = require(`http`);
let options = {
hostname: `localhost`,
port: 8080,
path: `/`,
method: `get`,
// 告訴服務端我當前要給你發什麼樣的資料
// headers: { // json資料格式
// `Content-Type`: `application/json`,
// `Content-Length`: 16, // 傳輸資料的長度(buffer的長度)
// },
headers:{ // 表單資料格式
`Content-Type`:`application/x-www-form-urlencoded`,
`Content-Length`:16,
},
}
let req = http.request(options);
req.on(`response`,function(res){
res.on(`data`,function(chunk){
console.log(chunk.toString());
});
});
// req.end(`{"name":"haha"}`); // json資料格式
req.end(`name=haha&age=18`); // 表單資料格式
複製程式碼
然後執行服務端檔案
再用cmd切換到檔案所在目錄執行客戶端檔案
node httpClient.js //客戶端檔案的名字
複製程式碼
服務端會打出
{ name: `haha`, age: `18` }
客戶端也會打出
hello node
怎麼樣~
經過這個小例子,是不是對http模組的理解更深了點呢