问题形容
应用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申请中的参数的,然而,咱们还是依照最新的写法来会好些...