我不明白为什么在Express应用程序中需要体解析器,因为我们可以不使用体解析器来获取数据。 它到底做什么,怎么做?


当前回答

历史:

早期版本的Express曾经捆绑了许多中间件。bodyParser是附带的中间件之一。当Express 4.0发布时,他们决定从Express中移除捆绑的中间件,并将它们作为单独的包。在安装bodyParser模块后,语法从app.use(express.json())改为app.use(bodyParser.json())。

bodyParser在4.16.0版本中被添加回Express,因为人们希望它像以前一样与Express捆绑在一起。这意味着如果您使用的是最新版本,则不必再使用bodyParser.json()。您可以使用express.json()代替。

对于那些感兴趣的人来说,4.16.0的发布历史在这里,拉请求在这里。

好吧,言归正传,

实现:

你需要加的就是加,

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

在路由声明之前,

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

快递公司会处理您的要求。:)

完整的例子是这样的,

const express       = require('express')
const app           = express()

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

app.post('/test-url', (req, res) => {
    console.log(req.body)
    return res.send("went well")
})

app.listen(3000, () => {
    console.log("running on port 3000")
})

其他回答

这些都是为了方便起见。

基本上,如果问题是“我们需要使用体解析器吗?”答案是否定的。我们可以使用更迂回的路线从请求后的客户端获得相同的信息,这种路线通常不太灵活,并且会增加我们必须编写的代码数量来获得相同的信息。

这有点像问“我们一开始需要用express吗?”同样,答案是否定的,同样,这一切都归结为为我们省去了编写更多代码来完成“内置”表达的基本事情的麻烦。

从表面上看,体解析器使以各种格式获取客户端请求中包含的信息变得更容易,而不是让您捕获原始数据流并确定信息的格式,更不用说手动将信息解析为可用的数据了。

是的,我们可以在没有体解析器的情况下工作。当你不使用它时,你得到原始请求,你的主体和头不在request参数的根对象中。您必须单独操作所有字段。

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

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

安装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。

然后你可以在根请求对象中得到body和header。例子

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

它解析HTTP请求体。这通常是必要的,当您需要知道的不仅仅是您所点击的URL时,特别是在POST或PUT PATCH HTTP请求的上下文中,您想要的信息包含在正文中。

基本上,它是一个中间件,用于解析JSON,纯文本,或只是返回一个原始的Buffer对象供您根据需要处理。

为了访问post数据,我们必须使用body解析器。基本上body-parser就是允许express读取body然后解析成我们能理解的Json对象。

保持简单:

如果你使用post请求,那么你需要请求的主体,所以你 将需要体解析器。 不需要安装带有express的body-parser,但如果您愿意,则必须使用它 接收岗位请求。

app.use (bodyParser。Urlencoded ({extended: false}));

{ extended: false }

错误的意思是,在body对象中没有嵌套数据。注意:请求数据内嵌在请求体对象中。