前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Node核心模块篇:HTTP

Node核心模块篇:HTTP

作者头像
凌虚
发布2020-07-18 18:27:05
5820
发布2020-07-18 18:27:05
举报

借助于各种框架强大的力量,Node.js的开发已经变得越来越便捷而高效。然而抛开这些框架,我们是否又对Node.js的核心模块及底层有一个清晰和深刻的认识呢?本系列文章将会与各位一起重新了解学习Node.js的各个核心模块。

HTTP协议是世界上广泛使用的应用层通信协议,而通过Node的核心模块HTTP,我们可以方便快速的构建自己的HTTP服务器和客户端,并在两者之间进行通信传递数据。

HTTP模块API一览


Class: http.Agent

一般的通信过程都会重复'请求连接'到'通信'到'断开连接'这个过程,然而对于一个持续长时间进行的通信过程而言,不停的连接、断开、重新连接显然是浪费通信资源且没有必要的,为了满足这种场景的需求,“长连接”便出现了。http.Agent 的作用正是为了在Node中实现长连接并池化socket。

Class: http.ClientRequest

该对象在内部被创建,并从 http.request() 返回。 用于处理客户端请求,是一个事件发射器。可通过其内部方法进行中止请求、完成请求、设置超时、发送数据块等等操作。

Class: http.Server

服务器对象,监听了客户端请求、建立连接、服务器关闭等等在内的多个事件,可通过其方法设置服务器超时、监听指定端口和主机、关闭服务器等。

Class: http.ServerResponse

该对象由HTTP服务器内部创建,代表服务器响应,可进行响应状态码处理、响应超时设置、消息头处理等操作。

Class: http.IncomingMessage

该对象由 http.server 或 http.ClientRequest 创建,并作为第一个参数分别递给 request 和 response 事件。 它可以用来访问响应状态、消息头、以及数据。

http.METHODS

解析器支持的HTTP方法列表。

http.STATUS_CODES

标准的HTTP状态码和描述集合。

http.createServer([requestListener])

用于创建一个HTTP服务器,返回的是 http.Server 实例。

http.get(options[,callback])

get请求便捷方法,也就是 http.request() 方法的特例。

http.globalAgent

agent代理的全局实例对象,所有HTTP客户端请求的默认agent。

http.request(options[,callback])

发起HTTP请求的方法,返回的是 http.ClientRequest 实例对象。

HTTP代码实战


接下来我们将运用HTTP模块的API来创建一个HTTP服务器及客户端,并让两者之间进行简单的通信。

创建HTTP服务器

const http = require('http');

const hostname = '127.0.0.1';

const port = 3456;

const server = http.createServer((req, res)=>{

console.log(`request url: ${req.url}`);

if (req.url === '/http') {

res.statusCode = 200;

res.setHeader('Content-Type', 'text/plain');

res.end('this is server response.');

} else {

res.statusCode = 404;

res.end('not found!');

}

req.on('data', (chunk) => {

console.log(`request data from client:

${chunk}`);

});

});

server.listen(port, hostname, ()=>{

console.log(`Server running at

http://${hostname}:${port}/`);

});

以上代码,通过 http.createServer 方法创建了一个服务器,其监听的主机也就是代码运行的本机,端口号则是3456,该服务器的功能为判断客户端请求的url地址,如果是'/http',则返回200状态码,和一条消息给客户端,否则,返回404状态码和'not found'消息。

创建HTTP客户端

const http = require('http');

let options = {

hostname: '127.0.0.1',

port: 3456,

path: '/http',

method: 'post',

}

let 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(`response from server : ${chunk}`);

});

res.on('end', () => {

console.log('No more data in response.');

});

});

req.on('error', (e) => {

console.log(`problem with request:

${e.message}`);

});

req.write('this is client request.');

req.end();

以上代码作为一个HTTP客户端,通过 http.request 方法向之前创建好的服务器发送POST请求,请求的地址为'/http',发送给服务器‘this is client request.’字符串,并接受服务器返回的状态码、消息头和数据。

注意:以上服务器和客户端代码分别构建在两个js文件中,可以通过命令行直接运行。

以上,我们简要的回顾了HTTP模块的顶层API,并构建了一个简单的服务器和客户端通信的示例。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Node Python Go全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档