Express JS中的正文解析器

时间:2015-02-09 15:25:55

标签: javascript node.js express body-parser

我一直在使用快速js搞乱一段时间了,我遇到了一种叫做身体解析器的东西。根据我的研究,body解析器允许我们通过HTTP请求发布POST内容。

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:0)

让我们尽量保持最低的技术水平。

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

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

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

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

var bodyParser = require('body-parser')

并添加以下行使其生效

app.use(bodyParser.urlencoded({extended: true}));

答案 1 :(得分:0)

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

Yopu需要包含stringDecoder(stringDecoder是节点内置的模块)

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;
});

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