问题形容

应用node中的express框架搭建好后端服务当前,须要接管相应的get、post、put、delete申请等。对于post申请接参数,以前的时候,咱们是下载body-parser插件包解析,而后在post申请的申请体req.body中就能拿到相应申请参数了。然而当初搭建express我的项目咱们会发现,竟然报错了,说bodyParser被弃用了,报错图如下:

报错截图

报错起因

咱们晓得bodyParser插件包能将表单里的数据格式化,不便咱们取参,在express4版本之前,都是以npm包的模式应用,想要应用bodyParser须要npm下载对应包,而后require引入包应用即可。然而设计express的大佬们发现bodyParser使用量很高、而且源代码优质简洁,所以罗唆就把bodyParser的源代码退出到express的源代码中去了,集成当前,开发者就能够摈弃以前的形式,应用新的形式,这样的话,更加方便快捷。

原来的写法

const express = require('express');const app = express();var bodyParser = require('body-parser');//须要npm下载并引入bodyParser的包,能力失去post申请的参数app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: false}));app.get('/', (req, res)=>{    res.send('Hello world');});app.post('/postTest', (req, res)=>{    console.log('post申请体传参',req.body);    res.send('post申请测试');});app.listen(8083, ()=>{    console.log('服务启动中')})

当初的写法

const express = require('express');const app= express();app.use(express.urlencoded({extended: false})); // 当初就不便多了,express的两个办法一执行就行啦app.use(express.json());app.get('/', (req, res)=>{    res.send('Hello world');});app.post('/postTest', (req, res)=>{    console.log('post申请体传参',req.body);    res.send('post申请测试');});app.listen(8083, ()=>{    console.log('服务启动中')})

总结

比照一下原来的写法的第三行、第四行、第五行的,和当初的写法第三行、第四行,咱们就能够显著看出,express4版本当前当初的写法更加简洁。

留神:app.use(express.urlencoded({extended: false}))app.use(express.json())这两个语句,要放在express实例对象挂载url路由之前,就是放在app.get( )、app.post( )之前。失常状况下,node我的项目中url路由都是模块化拆分解决,所以就是要放在app.use(allRouter)之前。就是解析post申请参数的两个语句的地位优先级比拟高。
另外说一下,尽管咱们的编辑器(vscode)会提醒这样的body-parser被弃用的相干文字介绍,然而,实际上,在express4版本中npm装置bodyparser包也是能够应用的,也是可能接管到post申请中的参数的,然而,咱们还是依照最新的写法来会好些...