核心模块——http

2016-07-22  本文已影响612人  小弋呀

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继承自此类,主要用于获取请求信息,属性如下:

request

现在自己用到了标出的这几个,
req.url获取链接中的path部分,搭配URL模块可以轻松获取get请求的查询字符串

三、http.ServerResponse

例子中的res,用于响应客户端请求

response
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('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(当然这完全不是一回事)

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();
上一篇下一篇

猜你喜欢

热点阅读