ExpressJs req.body 显示未定义



我是 ExpressJs 的新手,我想执行 POST 请求,但我无法让正文解析器工作

const express = require("express");
const path = require("path");
const config = require("./config");
// const logger = require("./middleware/logger")
// init express
const app = express();
// set 'public' as STATIC directory
app.use(express.static(path.join(__dirname, "public")));
// init middleware
// app.use(logger);
// setup parent router for api/people
app.use('/api/people', require("./routes/api/members"));
// adding body parser middleware
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// set PORT listen
app.listen(config.PORT, () =>
console.log(
`damiisdandy's server running on port ${config.PORT}... at ${config.time}`
)
);

这是路由文件

const express = require('express')
const uuid = require('uuid')
const config = require('../../config')
const router = express.Router();
router.post("/", (req, res) => {
res.send(req.body)
console.log(req.body)
// const newMember = {
//     id: uuid.v4(),
//     name: req.body.name,
//     email: req.body.email,
//     active: true,
// }
// if(!newMember.name || !newMember.email) {
//     return res.status(400).json({
//         msg: "Please Fill in the Name or Email"}
//     );
// }
// config.PEOPLE.push(newMember);
// res.json(config.PEOPLE);
})
module.exports = router

请我希望得到快速响应,我什至尝试过"身体解析器"模块,但这似乎也不起作用..我被困住了..请问我该怎么办?

它不适用于您的路由,因为您的.use语句位于父路由器之后。

您需要像这样将它们移动到父路由器上方:

// adding body parser middleware
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// setup parent router for api/people
app.use('/api/people', require("./routes/api/members"));

我相信你不需要显式安装或应用 bodyParser,因为 express 现在内置了它。试试这个,看看它是否有效,如果它不起作用,我们可以进一步探索。

你的索引.js文件中有 3 行吗?

// import body parser
const bodyParser = require('body-parser');
// support parsing of application/json type post data
app.use(bodyParser.json());
//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));

最新更新