问题描述在node中使用express框架搭建后端服务后,需要接收相应的get、post、put、delete等请求。对于post请求参数,以往我们都是下载body-parser插件包进行解析,然后在post请求的请求体req.body中获取对应的请求参数。但是现在在构建express项目的时候,我们会发现报错,说bodyParserisdeprecated,报错如下:报错截图报错原因我们知道bodyParser插件包可以格式化表单中的数据,方便我们获取参数。在express4版本之前,是以npm包的形式使用的。如果要使用bodyParser,需要到npm下载相应的包,然后require导入包。不过设计express的大佬发现bodyParser用的比较多,而且源码优质简洁,干脆把bodyParser的源码加入到express的源码中。集成后,开发者可以摒弃之前的方式。在这种情况下,使用新方法更加方便快捷。constexpress=require('express');原来的写法constapp=express();varbodyParser=require('body-parser');//需要从npm下载导入bodyParser包来获取post请求的参数app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:false}));app.get('/',(req,res)=>{res.send('Helloworld');});app.post('/postTest',(req,res)=>{console.log('postrequestbodyparameters',req.body);res.send('postrequesttest');});app.listen(8083,()=>{console.log('servicestarting')})现在写成constexpress=require('express');constapp=express();app.use(express.urlencoded({extended:false}));//现在方便多了,执行两个express方法就可以了app.use(express.json());app.get('/',(req,res)=>{res.send('Helloworld');});app.post('/postTest',(req,res)=>{console.log('post请求体参数',req.body);res.send('post请求测试');});app.listen(8083,()=>{console.log('servicestarting')})总结比较原写的第三行,第四行,第五行,和第三行和第四行目前的写法,我们可以很明显的看到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请求中的参数,但是,我们最好遵循最新的写作方法......
