Node.js 体解析器对express做什么?
我不明白为什么在Express应用程序中需要Node.js 体解析器对express做什么?,node.js,express,body-parser,Node.js,Express,Body Parser,我不明白为什么在Express应用程序中需要body parser,因为我们不需要使用body parser就可以获取数据。 它实际上做什么以及如何做?要处理Express.js版本4及更高版本中的httppost请求,您需要安装名为body parser的中间件模块 body解析器提取传入请求流的整个body部分,并在req.body 该中间件以前是Express.js的一部分,但现在必须单独安装 此正文解析器模块解析使用httppost请求提交的JSON、缓冲区、字符串和URL编码数据。使用
body parser
,因为我们不需要使用body parser
就可以获取数据。
它实际上做什么以及如何做?要处理Express.js版本4及更高版本中的
httppost
请求,您需要安装名为body parser
的中间件模块
body解析器
提取传入请求流的整个body部分,并在req.body
该中间件以前是Express.js的一部分,但现在必须单独安装
此正文解析器
模块解析使用httppost
请求提交的JSON、缓冲区、字符串和URL编码数据。使用NPM安装主体解析器
,如下所示
npm install body-parser --save
2019年4月-2日编辑:
在里面express@4.16.0主体解析器中间件与express捆绑在一起 为了访问post数据,我们必须使用
主体解析器
。基本上,body解析器是什么,它允许express读取body,然后将其解析为我们可以理解的Json
对象。它解析HTTP请求主体。当您需要知道的不仅仅是所点击的URL时,这通常是必需的,特别是在POST或PUT补丁HTTP请求的上下文中,您想要的信息包含在正文中
基本上,它是一个用于解析JSON、纯文本或仅返回原始缓冲区对象的中间件,供您根据需要处理。这些都是为了方便起见
基本上,如果问题是“我们需要使用主体解析器吗?”,答案是“不”。我们可以使用更迂回的路径从客户机post请求中获得相同的信息,这种路径通常不太灵活,并且会增加我们为获得相同信息而必须编写的代码量
这与问“我们是否需要使用express
作为开始?”是一样的。同样,答案是否定的,而且,实际上,这一切都可以归结为省去我们编写更多代码的麻烦,以完成express随“内置”而来的基本功能
从表面上看,body parser
使以各种格式获取客户端请求中包含的信息变得更容易,而不是让您捕获原始数据流并找出信息的格式,更不用说手动将这些信息解析为可用数据了。答案非常详细和精辟,答案包括:
简言之;正文解析器提取传入请求流的整个正文部分,并在req.body
上将其公开为更易于接口的内容。你不需要它本身,因为你可以自己做所有这些。然而,它很可能会做你想做的事,并为你省去麻烦
更深入一点;body parser为您提供了一个中间件,该中间件用于解压传入的请求数据(如果已压缩),并在“解析”之前等待请求正文的完整原始内容(这意味着如果您不打算使用请求正文,您只会浪费一些时间)
获得原始内容后,主体解析器将使用四种策略之一对其进行解析,具体取决于您决定使用的特定中间件:
- :不实际解析正文,只是在on
req.body
中公开以前缓冲的内容
- :将缓冲区读取为纯文本,并在req.body上显示结果字符串
- :将文本解析为URL编码的数据(这是浏览器倾向于从设置为POST的常规表单发送表单数据的方式),并在
req.body
上公开结果对象(包含键和值)。用于比较;在PHP中,所有这些都会自动完成并在$\u POST
中公开
- :将文本解析为JSON,并在
req.body
上公开结果对象
只有在将req.body
设置为所需的内容后,它才会调用堆栈中的下一个中间件,然后该中间件可以访问请求数据,而无需考虑如何解压和解析它
您可以参考body parser阅读他们的文档,其中包含有关其工作的信息。是的,我们可以在没有body parser的情况下工作。当您不使用它时,您将获得原始请求,并且您的主体和头不在请求参数的根对象中。您必须单独操作所有字段
或者,您可以使用主体解析器
,因为express团队正在维护它
主体解析器可以为您做什么:它简化了请求。
如何使用:以下是示例:
安装npm安装正文解析器--保存
下面介绍如何在express中使用主体解析器:
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 }));
链接
然后,您可以在根请求对象中获取主体和头。范例
app.post("/posturl",function(req,res,next){
console.log(req.body);
res.send("response");
})
让我们尽量保持这一最低的技术性
假设您正在向NodeJS服务器发送html表单数据,即您向服务器发出了请求。服务器文件将在请求对象下接收您的请求。现在,按照逻辑,如果您将这个请求对象记录在服务器文件中,您应该可以在其中的某个位置看到表单数据,然后可以提取这些数据,但是哇!你真的不知道
那么,我们的数据在哪里?如果它不仅出现在我的请求中,我们将如何提取它
对此的简单解释是http以位和块的形式发送表单数据,这些数据在到达目的地时被组装起来。那么,您将如何提取数据呢
但是,为什么每次手动解析数据块并将其组装时都要承受这种痛苦呢。使用一种称为“主体解析器”的方法,它可以为您实现这一点
正文解析器解析您的请求,并将其转换为一种格式,您可以轻松地从中提取相关内容
var loginDetails = {
username : request.body.username,
password : request.body.password
};
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// at this point, `body` has the entire request body stored in it as a string
});
const app = express();
app.use(express.json({ limit: '100mb' }));
{ extended: false }