首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >body-parser对express做了什么?

body-parser对express做了什么?
EN

Stack Overflow用户
提问于 2016-07-11 20:08:39
回答 11查看 352.6K关注 0票数 426

我不明白为什么我们在Express应用程序中需要body-parser,因为我们可以在不使用body-parser的情况下获取数据。它到底做了什么,又是如何做的呢?

EN

回答 11

Stack Overflow用户

发布于 2017-04-26 14:47:09

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

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

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

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

代码语言:javascript
复制
npm install body-parser --save

2019年4月2日编辑: in express@4.16.0与express捆绑在一起的主体解析器中间件。for more details see this

票数 326
EN

Stack Overflow用户

发布于 2018-01-21 15:53:55

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

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

正文解析器可以为您做什么:它简化了请求。

使用方法:示例如下:

安装npm install body-parser --save

下面是如何在express中使用body-parser:

代码语言:javascript
复制
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

然后,您可以在根请求对象中获取body和headers。示例

代码语言:javascript
复制
app.post("/posturl",function(req,res,next){
    console.log(req.body);
    res.send("response");
});
票数 110
EN

Stack Overflow用户

发布于 2017-11-25 20:52:41

答案here非常详细和精彩地解释了它,答案包括:

简而言之,

;正文解析器提取传入请求流的整个正文部分,并将其作为更容易与之交互的内容在req.body上公开。您本身并不需要它,因为您可以自己完成所有这些工作。然而,它很可能会做你想做的事情,省去你的麻烦。

更深入一点;主体解析器为您提供了一个中间件,它使用nodejs/zlib解压传入的请求数据,并使用stream-utils/raw-body在“解析”请求正文之前等待请求正文的完整原始内容(这意味着如果您不打算使用请求正文,那么您只是浪费了一些时间)。

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

上的Buffer中公开以前缓冲的内容

  • bodyParser.text():以纯文本形式读取缓冲区,并在req.body上显示结果字符串。

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

中公开

上公开结果对象

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

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

票数 71
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38306569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档