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