我不明白为什么我们在Express应用程序中需要body-parser
,因为我们可以在不使用body-parser
的情况下获取数据。 它究竟有什么作用?身体语法分析器用表达式做什么?
回答
以为这是一个老问题,但它可能会帮助别人,而不是使用bodyParser中间件从表达我们可以使用这些工具。
如果您想解析端点中的json,请使用express.json()
中间件。如果您想要json和urlencoded端点,请使用[express.json(), express.urlencoded()]
作为中间件。
如果您希望用户上传文件到您的端点,您可以使用express.multipart()
,并确保清理所有创建的临时文件。
林学习和思想实施这个战略看到如何我不愿意添加更多的模块和其他东西,如果明确已经有它,但事实证明,它不再与快递捆绑,必须单独安装。 只是把这里更新的信息。 – somdow
要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
为了访问发布的数据,我们必须使用body-parser
。基本上什么body-parser
是允许明确读取身体,然后解析成我们可以理解的对象Json
。
它解析HTTP请求主体。当您需要知道的不仅仅是您所访问的URL时,这通常是必需的,特别是在POST或PUT PATCH HTTP请求的上下文中,您希望的信息包含在正文中。
基本上它是一个解析JSON,纯文本或者只是返回原始Buffer对象的中间件,供您根据需要进行处理。
这些都是为了方便。
基本上,如果问题是'我们需要使用body-parser
?'答案是不'。我们可以从客户请求中获得相同的信息,使用更加迂回的路线,这种路线通常不那么灵活,并且会增加我们编写的代码数量以获得相同的信息。
这是一样的问'我们需要使用express
开始?'再次,答案是没有,并且再次,实际上,这归结于为我们节省编写更多代码以执行“内置”所表达的基本内容的麻烦。
表面上 - body-parser
可以更容易地以各种格式获取客户端请求中包含的信息,而不是使您捕获原始数据流并确定信息的格式,更不用说手动解析信息转换为可用数据。
答案here解释很详细,精辟,答案包括:
在短; body-parser提取传入请求流的整个正文部分,并将其公开在
req.body
上,因为它更易于与界面交互。你本身并不需要它,因为你可以自己做所有这些。但是,它很可能会做你想做的事情,并为你节省麻烦。
要深入一点; body-parser为您提供了一个中间件,它使用nodejs/zlib来解压缩传入的请求数据(如果它被压缩),并且stream-utils/raw-body在“解析它”之前等待请求主体的完整原始内容(这意味着如果您不打算使用请求机构,你只是浪费了一些时间)。
其原始内容后,身体解析器将使用它的四个战略之一,这取决于具体的中间件解析您决定使用:
bodyParser.raw():实际上并没有解析身体,但只是在
req.body
上的Buffer中公开缓冲起来的内容。bodyParser.text():以纯文本形式读取缓冲区,并将req.body中的结果字符串公开。
bodyParser.urlencoded():将文本解析为URL编码数据(这是浏览器倾向于将常规表单设置为POST的形式数据发送方式),并在
req.body
上显示生成的对象(包含键和值)。为了比较;在PHP中,所有这些都会自动完成并在$_POST
中公开。bodyParser.json():将文本解析为JSON并在
req.body
上公开结果对象。只有设置
req.body
到理想的内容将其调用堆栈中的下一个中间件,那么它可以访问请求的数据,而不必考虑如何解压和解析之后。
你可以参考身体解析器github阅读他们的文档,它包含有关其工作的信息。
是的,我们可以在没有body-parser
的情况下工作。当你这样做时,你会得到原始请求,并且你的body和headers不在根对象中。你将不得不单独操纵所有的领域。您可以使用body-parser
,因为快递团队正在维护它。
什么身体分析器可以为您做:它简化了请求。
如何使用它:这里是例子:
安装npm install body-parser --save
该如何利用身体的解析器快递:
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 }));
链接。
- 1. Dart使用什么语法分析器?
- 2. 什么是语法表达式?
- 3. OSLO,ANTLR或其他语法分析器,用于解析查询表达式
- 4. 解析数学表达式,该方法的分类是什么?
- 5. 为什么我们需要明确的身体分析器?
- 6. 使用Irony实现前缀表示法表达式分析器
- 7. 使用身体分析器与强大
- 8. 错误:预期的lambda表达式的身体..(什么是Lambda ???)
- 9. 正则表达式\\ s *,\\ s *做什么?
- 10. “?=”在正则表达式中做什么?
- 11. 这个正则表达式做什么?
- 12. 这个正则表达式做什么?
- 13. SQL:“DISTINCT ON(表达式)”做什么?
- 14. 这些Javascript表达式(+!)做了什么?
- 15. 正则表达式在做什么?
- 16. 中缀表示法解析表达式的算法是什么?
- 17. 表达式语言中的$ do做什么
- 18. 表达式(φ*)*表示什么语言?
- 19. 解析表达式并检索分析树的最简单方法是什么?
- 20. 为什么使用词法分析器?
- 21. 表达身体
- 22. GPATH做谓语用比较表达式
- 23. 红宝石/正则表达式语法分析字符串
- 24. PHP正则表达式语法分析数据
- 25. FLEX(词法分析器)正则表达式 - 重用定义
- 26. 逻辑表达式分析器
- 27. javascript条件表达式分析器
- 28. 正则表达式词法分析
- 29. drools - 无法分析表达式
- 30. 部分表达式无法解析:AND
为了读取HTTP POST数据,我们必须使用“身体分析器”节点模块。 body-parser是一个快速中间件,它读取表单的输入并将其存储为可通过'req.body'访问的javascript对象 – refactor
使用express可以读取HTTP请求中的任何数据,例如头文件'req.headers' (数组),你可以通过@CleanCrispCode读取http数据包的主体为'req.body',你可以读取查询参数'req.query.variable',它有助于自动转换请求在javascript对象中的帮助。 –
检查我的答案,也许它会帮助你 –