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