express4版本中的“bodyParser”已被弃用报错解决方案

问题描述 使用node中的express框架搭建好后端服务以后,需要接收相应的get、post、put、delete请求等。对于post请求接参数,以前的时候,我们是下载body-parser插件包解析,然后在post请求的请求体req.body中就能拿到相应请求参数了。但是现在搭建express项目我们会发现,居然报错了,说bodyParser被弃用了,报错图如下:
报错截图 express4版本中的“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版本中的“bodyParser”已被弃用报错解决方案】对比一下原来的写法的第三行、第四行、第五行的,和现在的写法第三行、第四行,我们就可以明显看出,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请求中的参数的,但是,我们还是按照最新的写法来会好些...

    推荐阅读