1

我一直在使用 express js 有一段时间了,我遇到了一个叫做 body parser 的东西。根据我的研究,body 解析器允许我们从 HTTP 请求中发布内容。

我的问题是,在使用 express.js 时是否绝对有必要使用正文解析器?

如果没有必要,那么使用它有什么好处,如果不使用正文解析器,那么需要做些什么来确保内容已发布?

先感谢您。

4

2 回答 2

2

让我们尽量保持技术含量最低。

假设您正在向 node-js 服务器发送一个 html 表单数据,即您向服务器发出请求。服务器文件将在请求对象下接收您的请求。现在按逻辑,如果您在服务器文件中控制台记录此请求对象,您应该会在其中的某个位置看到您的表单数据,然后可以提取这些数据,但是哇!你实际上没有!

那么,我们的数据在哪里?如果它不仅出现在我的请求中,我们将如何提取它。

对此的简单解释是 http 以零碎的形式发送您的表单数据,这些数据旨在在到达目的地时进行组装。那么你将如何提取数据。使用一种叫做“body-parser”的东西可以为你做这件事。

body-parser 解析您的请求并将其转换为一种格式,您可以从中轻松提取您可能需要的相关信息。首先在您的 app.js 文件中需要以下内容。

var bodyParser = require('body-parser')

并添加以下行以使其工作

app.use(bodyParser.urlencoded({extended: true}));
于 2019-01-31T15:57:13.503 回答
1

您可以利用事件on('data')on('end')提取有效负载。每当发送 POST 请求时,数据都会以比特流的形式到达。当流进入时,on('data')事件被触发,您可以开始将流收集到缓冲区中。当流结束(已收到所有数据)on('end')时,触发事件,即您可以开始使用刚刚收集的数据。

Yopu 需要包含 stringDecoder(stringDecoder 是一个内置在 node 中的模块)

const string_decoder= require('string_decoder').StringDecoder;

您需要让这段代码作为中间件运行。

var buffer= "";
request.on('data',  function(data_stream)
{
    //start collecting the data stream into a buffer
    buffer= buffer + utf8_decoder.write(data_stream);
});

request.on('end', function()
{
    buffer= buffer + utf8_decoder.end();
    //add the buffer to the request object so it can be accessed elsewhere
    request.payload= buffer;
});

如果您决定不使用任何外部库,这可能是最好的方法。

于 2019-02-01T15:55:01.460 回答