问题描述
使用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请求中的参数的,但是,我们还是按照最新的写法来会好些...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。