http模块API内容也不是很多,主要有http.server、http.ClientRequest、http.ServerResponse、http.IncomingMessage四个类
一、http.server
服务器类,创建一个服务器对象的方法如下:
const http = require('http');
const server = http.createServer((req, res) => {
//req即是http.IncomingMessage类
//res是http.ServerResponse类
res.end();
});
server.listen(8000);
这就创建了一个服务器,监听8000端口,127.0.0.1:8000,createServer方法的回调函数用于监听server的request事件
二、http.IncomingMessage
上例中的req继承自此类,主要用于获取请求信息,属性如下:
现在自己用到了标出的这几个,
req.url获取链接中的path部分,搭配URL模块可以轻松获取get请求的查询字符串
三、http.ServerResponse
例子中的res,用于响应客户端请求
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, { 'Content-Type': 'text-plain' });
response.write('Hello ');
response.end('World\n');
}).listen(8000);
四、http.ClientRequest
这是我理解为后端代理,用于在服务器发送请求,可以用这个写个小爬虫程序
- http.get(options[, callback])
发送get请求,不需要有请求体
http.get('http://www.google.com/index.html', (res) => {
console.log(`Got response: ${res.statusCode}`); // consume response body
res.resume();
})
.on('error', (e) => {
console.log(`Got error: ${e.message}`);
});
此处的res是用于接收另一个服务端的响应,而不是去响应,可以堪称这个时候有点类似http.IncomingMessage(当然这完全不是一回事)
- http.request(options[, callback])
用于发送post请求,由于post请求需要有请求体,参数就复杂多了,官网的例子:
var postData = querystring.stringify({ 'msg' : 'Hello World!'});
var options = {
hostname: 'www.google.com', port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData) }
};
var req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.')
})
});
req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
});
// write data to request body
req.write(postData);
req.end();