提问者:小点点

body-parser对Express做什么?


我不明白为什么在Express应用程序中需要body-parser,因为我们可以不使用body-parser获取数据。它实际上是做什么的,怎么做的?


共3个答案

匿名用户

要在Express.js版本4及以上版本中处理HTTP POST请求,需要安装名为body-parser的中间件模块。

body-parser提取传入请求流的整个正文部分,并将其公开在req.body上。

中间件以前是Express.js的一部分,但现在您必须单独安装它。

这个body-parser模块解析使用HTTP POST请求提交的JSON,缓冲区,字符串和URL编码的数据。使用NPM安装body-parser,如下所示。

npm install body-parser --save

2019-April-2编辑:in express@4.16.0与Express绑定的主体解析器中间件。有关更多详细信息,请参见

匿名用户

是的,我们可以在没有body-parser的情况下工作。当您不使用that时,您将获得原始请求,并且您的主体和头不在request参数的根对象中。您必须单独操作所有字段。

或者您可以使用body-parser,因为express团队正在维护它。

body-parser可以为您做什么:它简化了请求。
如何使用它:下面是示例:

安装npm安装body-parser--保存

以下是如何在Express中使用body-parser:

const express = require('express'),
      app = express(),
      bodyParser = require('body-parser');

// support parsing of application/json type post data
app.use(bodyParser.json());

//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));

林克。

https://github.com/expressjs/body-parser。

然后您可以在根请求对象中获取主体和头。示例

app.post("/posturl",function(req,res,next){
    console.log(req.body);
    res.send("response");
})

匿名用户

这里的答案解释得非常详细和精彩,答案包含:

简而言之;body-parser提取传入请求流的整个正文部分,并将其公开在req.body上,作为更易于接口的内容。你不需要它本身,因为你可以自己做所有这些。然而,它极有可能会做你想做的事,省去你的麻烦。

深入一点;body-parser为您提供了一个中间件,该中间件使用nodejs/zlib来解压缩传入的请求数据,并使用stream-utils/raw-body来等待请求体的完整原始内容,然后再“解析”它(这意味着如果您不打算使用请求体,您只是浪费了一些时间)。

在获得原始内容之后,body-parser将使用以下四种策略之一对其进行解析,具体取决于您决定使用的特定中间件:

>

  • BodyParser.raw():实际上并不解析主体,而只是在req.body的缓冲区中公开以前缓冲的内容。

    text():将缓冲区作为纯文本读取,并在req.body上公开结果字符串。

    bodyParser.urlenCoded():将文本解析为URL编码的数据(这是浏览器从设置为POST的常规表单发送表单数据的方式),并在req.body上公开结果对象(包含键和值)。用于比较;在PHP中,所有这些都是自动完成的,并在$_post中公开。

    JSON():将文本解析为JSON,并在req.body上公开结果对象。

    只有在将req.body设置为所需的内容之后,它才会调用堆栈中的下一个中间件,然后该中间件就可以访问请求数据,而不必考虑如何解压缩和解析它。

    你可以参考body-parser github来阅读他们的文档,它包含了关于它的工作的信息。