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