淺度理解NodeJS的HTTP模塊

HTTP模塊是NodeJS自帶的核心模塊,其用法簡單,只要建立一個服務器,而後監聽端口,整個服務就跑起來啦node

let http = require('http');
let server = http.createServer(function(req,res){

});
server.listen(8080);
複製代碼

http模塊createServer的callback中,
req(request)表明客戶端的數據,是一個可讀流;
res(response)表明服務端的數據,是一個可寫流; 你能夠拿到你想要的數據:json

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模塊的工做原理,讓你一目瞭然。bash

服務端的代碼和上段代碼差很少,只是咱們要接收到客戶端的數據後用請求頭部來判斷數據的格式服務器

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事件拿到客戶端的數據app

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切換到文件所在目錄運行客戶端文件ui

node httpClient.js  //客戶端文件的名字
複製代碼

服務端會打出
{ name: 'haha', age: '18' }
客戶端也會打出
hello node
怎麼樣~
通過這個小例子,是否是對http模塊的理解更深了點呢url

相關文章
相關標籤/搜索