首页 > 解决方案 > 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: {}}

标签: node.jsexpressrestbody-parser

解决方案


文档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 });
});

推荐阅读