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


当前回答

保持简单:

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

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

{ extended: false }

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

其他回答

如果你不想使用单独的npm包体解析器,最新的express(4.16+)有内置的体解析器中间件,可以这样使用:

const app = express();
app.use(express.json({ limit: '100mb' }));

附:并不是所有的体解析功能都在表达式中。请参考文档以获得完整的使用方法

保持简单:

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

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

{ extended: false }

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

让我们尽量减少技术性。

假设你正在发送一个html表单数据到node-js服务器,也就是说你向服务器发出了一个请求。服务器文件将在请求对象下接收您的请求。按照逻辑,如果你在服务器文件中记录这个请求对象你会看到表单数据,这些数据可以提取出来!实际上你没有!

那么,我们的数据在哪里?如果它不仅出现在我的请求中,我们将如何提取它。

简单的解释是,http以零碎的形式发送表单数据,以便在到达目的地时进行组装。那么如何提取数据呢?

但是,为什么每次都要手动解析数据块并将其组装起来呢?使用一种叫做“body-parser”的东西,它可以帮你做到这一点。

Body-parser解析您的请求并将其转换为可以轻松提取所需相关信息的格式。

例如,假设在前端有一个注册表单。您正在填写它,并请求服务器将详细信息保存在某个地方。

如果使用体解析器,则从请求中提取用户名和密码如下所示。

var loginDetails = {    
    username : request.body.username,    
    password : request.body.password    
};

基本上,body-parser解析传入的请求,组装包含表单数据的块,然后为您创建这个body对象,并用表单数据填充它。

历史:

早期版本的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")
})

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