即使使用 body-parser 后,Express.js req.body 也未定义

问题描述 投票:0回答:1

这是我的控制器文件。我已经使用了主体解析器,但我仍然得到 req.body 未定义。

const express = require("express");
const app = express();
let bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));  
app.use(bodyParser.json());

const Projects = require("../models/Projects");

// Route handlers
const handleCreateProject = async (req, res) =\> {
try {
const body = req.body;
console.log("req.body", req.body);
const result = await project.save();
res.status(201).send(result);
console.log("Project successfully added");
} catch (error) {
console.error("Error saving project:", error);
res.status(500).send({ error: "Failed to save project" });
}
};

const handleGetAllProjects = async (req, res) =\> {
try {
const projects = await Projects.find({});
if (projects.length \> 0) {
res.send(projects);
} else {
res.send({ result: "No projects found" });
}
} catch (error) {
console.error("Error fetching projects:", error);
res.status(500).send({ error: "Failed to fetch projects" });
}
};

module.exports = {
handleCreateProject,
handleGetAllProjects,
};

这是我的架构

const mongoose = require("mongoose");

const ProjectSchema = new mongoose.Schema({
name: { type: String },
description: { type: String },
createdAt: { type: Date, default: Date.now },
updatedAt: { type: Date, default: Date.now },
});

const Project = mongoose.model("projects", ProjectSchema);
module.exports = Project;

这是我的路线文件:-

const express = require("express");
const router = express.Router();
const {handleCreateProject,handleGetAllProjects} = require('../controllers/Projects')

router.post("/createproject",handleCreateProject);
router.get("/getallprojects",handleGetAllProjects);

module.exports = router;

这是我的index.js :-

require('dotenv').config()
const express = require('express');
const {MongoConnect} = require("./config")
const app = express();
const port = process.env.MONGO_PORT;
// const router = express.Router();
const cors = require("cors");

// Middleware setup
app.use(cors());

MongoConnect().then(()=\>console.log("MongoDB connected"));
const userRouterProjects = require('./routes/Projects')

app.use("/api",userRouterProjects);

app.listen(port,()=\>console.log(`Server is running on port ${port}`));

当我从前端或 Postman 发送 post 请求时,条目会在数据库中创建,但正文中的数据不会保存在数据库中。尽管正确使用了主体解析器,但我在后端得到了 req.body 未定义。

Only this is saving in database
{
"\_id": "6629137fe1ab2f4bbab92586",
"createdAt": "2024-04-24T14:13:19.579Z",
"updatedAt": "2024-04-24T14:13:19.579Z",
"\__v": 0
}
This is request.body I am sending
{
"name":"Task Manager1",
"description":"This is a task manager"
}

Content-type:application/json 已在邮递员中使用,我正在发送 POST 请求。

node.js express postman
1个回答
0
投票

此代码应该位于index.js 文件而不是controllers 文件中。从控制器文件中删除它并将其放入index.js

const bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false })); 
© www.soinside.com 2019 - 2024. All rights reserved.