node.js - Express 4.17 req 正文为空
问题描述
req.body
永远是空的。
index.js:
const express = require('express');
const app = express();
const port = 8080;
app.use(express.static('public'))
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
const userRoutes = require('./routes/user.routes');
app.use("/user", userRoutes);
app.listen(port, () => console.log("app listening."));
路线/用户路线:
const express = require('express');
const router = express.Router();
router.post('/', (req, res) => {
res.json({ requestBody: req.body });
});
module.exports = router;
客户端脚本:
fetch('/user', {
method: 'POST',
body: JSON.stringify({ testData: "testData" }),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
})
.then(function(response) {
return response.json();
})
.then(function(responseData) {
console.log(responseData);
})
.then(function(result) {
if (result.error) {
alert(result.error.message);
}
});
控制台获取结果:
{requestBody: {}}
解决方案
从文档中req.body
默认情况下,它是未定义的,并且在您使用 body-parser 和 multer 等正文解析中间件时填充。
所以你需要使用中间件来填充req.body
const bodyParser = require('body-parser')
router.use(bodyParser.json())
router.post('/', (req, res) => {
res.json({ requestBody: req.body });
});
推荐阅读
- sql - 在 SQLite 中存储比 RAM 大得多的数据
- mysql - 模拟row_num的Mysql会话变量不增加值
- javascript - jQuery 更改事件被调用了两次
- docker - 在 docker swarm 中运行我的 vertx3 http 处理程序时连接被拒绝
- c++ - 编译 .o 和 .exe 的 C++ makefile
- angular - Make Angular use absolute URL in href and src
- vba - VBA用户窗体未在命令按钮单击时关闭
- angular - Angular 6 - HTTP Response 200 在订阅中为空
- c# - Adding lines to a textbox through code while keeping the previous lines? C#
- timestamp - Dynamically renaming files using batch with no fixed position for string