Node Http模塊
我們可以使用 Node 創建一個服務器,在 Node 中專門提供了一個核心模塊:http
http 這個模塊的職責,就是幫助我們創建編寫服務器的
1、加載http核心模塊
var http = require('http');
2、使用http.createServer()方法創建了一個web服務器,返回一個Server實例
var server = http.createServer();
3、服務器要幹什麼?
- 提供服務:對數據的服務
- 發請求
- 接收請求
- 給個反饋 (發送響應)
4、簡單web服務器
http.server 是一個基於事件的 HTTP 服務器,所有的請求都被封裝到獨立的事件當中。
let http = require('http');
//創建web服務器,提供服務,處理客戶端的請求
//普通方式監聽
let server = http.createServer((req,res)=>{
//req客戶端請求的相關信息,res返回響應信息
let url = req.url;
//解決中文亂碼
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
res.end('訪問路徑:'+url);
}).listen(9000);
//request事件監聽
/*server.on('request', (req, res) => {
console.log(req.url);
//設置應答頭信息
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write('HHHHH<br>');
});
server.listen(9000);*/
//當TCP建立連接的時候,該事件被觸發,提供了一個參數socket,爲net.socket的實例(底層協議對象)
server.on('connection',(req,socket,head)=>{
console.log('有連接');
});
在瀏覽器通過http://localhost:9000/即可訪問:
5、http.ServerRequset
http 請求分爲請求頭和請求體,如果請求的內容少的話就直接在請求頭協議完成之後立即讀取,請求體可能相對較長一點,需要一定的時間傳輸。因此提供了三個事件用於控制請求體傳輸:
- data:當請求體數據到來時,該事件被觸發,該事件一共一個參數chunk,表示接受到的數據。
- end:當請求體數據傳輸完成時,該事件被觸發,此後將不會再有數據到來。
- close:用戶當前請求結束時,該事件被觸發,不同於 end,如果用戶強制終止了傳輸,也會觸發 close。
serverRequest常用信息:
let http = require('http');
let server = http.createServer((req,res)=>{
//客戶端請求是否發送完成
console.log(req.complete);
//http協議版本
console.log(req.httpVersion);
//connnection
console.log(req.socket);
//http請求頭
console.log(req.headers);
//http請求方法
console.log(req.method);
res.writeHead(200,{'Content-Type':'text/plain'});
res.write("hahahaha");
res.end();
}).listen(9000);