Javascript expressjs中的体解析器

Javascript expressjs中的体解析器,javascript,node.js,express,body-parser,Javascript,Node.js,Express,Body Parser,我已经和expressjs混在一起有一段时间了,我遇到了一个叫做body解析器的东西。根据我的研究机构,解析器允许我们从HTTP请求中发布内容 我的问题是,在使用express.js时是否绝对有必要使用body解析器 如果没有必要,那么使用它的优点是什么?如果没有使用主体解析器,那么需要做什么来确保发布内容 提前感谢您。让我们尽量把这一点保留在最低技术层面 假设您正在向NodeJS服务器发送html表单数据,即您向服务器发出了请求。服务器文件将在请求对象下接收您的请求。现在,按照逻辑,如果您将这

我已经和expressjs混在一起有一段时间了,我遇到了一个叫做body解析器的东西。根据我的研究机构,解析器允许我们从HTTP请求中发布内容

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

如果没有必要,那么使用它的优点是什么?如果没有使用主体解析器,那么需要做什么来确保发布内容


提前感谢您。

让我们尽量把这一点保留在最低技术层面

假设您正在向NodeJS服务器发送html表单数据,即您向服务器发出了请求。服务器文件将在请求对象下接收您的请求。现在,按照逻辑,如果您将这个请求对象记录在服务器文件中,您应该可以在其中的某个位置看到表单数据,然后可以提取这些数据,但是哇!你真的不知道

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

对此的简单解释是http以位和块的形式发送表单数据,这些数据在到达目的地时被组装起来。那么,您将如何提取数据呢。使用一种称为“主体解析器”的方法,它可以为您实现这一点

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

var bodyParser = require('body-parser')
并添加以下行以使其正常工作

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

您可以使用('data')上的事件
和('end')
上的事件来提取有效负载。无论何时发送POST请求,数据都以位流的形式到达。当流进入时,
on('data')
事件被触发,您可以开始将流收集到缓冲区中。当流结束(所有数据都已收到)时,将触发
on('end')
事件,此时您可以开始使用刚刚收集的数据

Yopu需要包括stringDecoder(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;
});

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

req
仍将其内容作为查询字符串保存在其中的某个位置。主体解析器使提取它的任务更容易。结账
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;
});