Node.js 創建HTTP服務器和GET/POST請求

Node.js自帶的http模塊可以創建服務器,也可以發送GET和POST請求。

一、創建服務器

使用http.createServer()方法創建服務器,使用listen方法綁定端口3000。
通過req, res參數來接收和響應數據。

//httpserver.js
const http = require('http');
const url = require("url");
const util = require('util');
const querystring = require('querystring');
const port = 3000;

http.createServer((req, res) => {
    res.statusCode = 200,
    res.setHeader('Content-Type', 'text/plain;charset=utf-8');
    if(req.method === 'GET') {
        toGet(req, res);
    }else if(req.method === 'POST') {
        toPost(req, res);
    }
}).listen(port, () => {
    console.log(`Server listening on: http://localhost:${port}`);
});

//獲取GET請求內容 
function toGet(req, res){
    let data = 'GET請求內容:\n' + util.inspect(url.parse(req.url)); 
    res.end(data);
    console.log(data);
}

//獲取POST請求內容、cookie 
function toPost(req, res){
    // 定義了一個data變量,用於暫存請求體的信息
    let data = '';
    // 通過req的data事件監聽函數,每當接受到請求體的數據,就累加到post變量中
    req.on('data', function(chunk){    
        data += chunk;
    }); 
    // 在end事件觸發後,通過querystring.parse將post解析爲真正的POST請求格式,然後向客戶端返回。
    req.on('end', function(){    
        //data = querystring.parse(data);
        //res.end('POST請求內容:\n' + util.inspect(data));
        data = 'POST請求內容:\n' + data;        
        res.end(data);
        console.log(data);
        console.log('cookie內容:\n' + req.headers.cookie);
    });
}

在命令行提示符窗口運行node httpserver.js啓動

>node httpserver.js
Server listening on: http://localhost:3000

 二、發送GET請求

//httpget.js
const http = require('http');
const options = {
    host: 'localhost',
    port: 3000,
    path: '/test?id=1',
    method: 'GET'
};

const req = http.request(options, res => {
    console.log(`狀態碼: ${res.statusCode}`);
    res.on('data', d => {
        process.stdout.write(d);
    });
});

req.on('error', error => {
    console.error(error)
});
req.end();

打開一個新的命令行提示符窗口運行node httpget.js

>node httpget.js
狀態碼: 200
GET請求內容:
Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?id=1',
  query: 'id=1',
  pathname: '/test',
  path: '/test?id=1',
  href: '/test?id=1'
}

三、發送POST請求,帶cookie

//httppost.js
const http = require('http');

const cookie = 'id=1;name=lc;';
const data = JSON.stringify({
  name: 'lc'
});

const options = {
    host: 'localhost',
    port: 3000,
    path: '/test2',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': data.length,
        'Cookie': cookie
    }
};

const req = http.request(options, res => {
    console.log(`狀態碼: ${res.statusCode}`);
    res.on('data', d => {
        process.stdout.write(d);
    });
});

req.on('error', error => {
    console.error(error);
});
req.write(data);
req.end();

打開一個新的命令行提示符窗口運行node httppost.js

>node httppost.js
狀態碼: 200
POST請求內容:
{"name":"lc"}

服務器的命令行提示符窗口輸出:

POST請求內容:
{"name":"lc"}
cookie內容:
id=1;name=lc;

 

使用supervisor自動重啓服務器

上面服務器端httpserver.js代碼每次有改動,都需要Ctrl+C退出再重新node httpserver.js運行,這是因爲Node.js在第二次後訪問的是內存,避免重複載入。
解決方法是使用npm安裝supervisor,它會監視對代碼的改動並自動重啓Node.js。

npm install -g supervisor

啓動服務器改爲使用:

supervisor httpserver.js

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章