使用 Node 原生方法处理 HTTP 请求

Photo by frdm . on Unsplash

koa 和 express 两种框架都对原生的 HTTP 进行了封装方便用户快速地开发 Web 应用。但是对于 HTTP 请求体的解析都没有提供内置的处理。

在 Node 中 HTTP 请求对象被分装成了一个流对象,因此需要使用读取流的方法去处理。当然,开源社区为这两种框架都提供了 body-parser 中间件,极大了简化了 HTTP 请求体解析的流程。但是 Node 原生方法是 body-parser 中间件的基础,让我们一起来探索吧。

创建 HTTP 服务器

我们用 HTTP 包中的 createServer 创建一个 HTTP 服务器。注意它的传参。

解析请求

createServer 中传递的 req 是 Node 对 HTTP 请求的封装。

它是一个http.IncomingMessage ,并继承于 stream.Readable。是一个只读流。我们可以通过 method 方法获取到请求类型。

按照解析只读流的方法可以解析这个请求体。我们可以监听 data 事件来获取数数据(由于是流式读取,因此将数据分成各个小块 chunk 来读取)。若没有调用 setEncoding() 方法,data 事件返回的小块是 Buffer 类型,因此这里要做一个转换。

返回响应

我们可以通过监听 end 事件在数据流读取完毕之后,通过 res 对象返回请求。res 对象是 http.ServerResponse 类型。通过调用 res.end 将响应数据写入请求体中。它是 res.write 和 res.end 的快捷方式。

相关阅读

为什么 TCP 需要三次、四次握手

参考链接

How to handle the POST request body in Node.js without using a framework

发表评论

电子邮件地址不会被公开。 必填项已用*标注