阅读 360

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

问题描述

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

报错截图

1.png

报错原因

我们知道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请求中的参数的,但是,我们还是按照最新的写法来会好些...

文章分类
前端