首页 > 解决方案 > node.js req.body 返回未定义(已解决)

问题描述

编辑:@LawrenceCherone 解决了这个问题,它的 (req, res, next) 不是 (err, res, req)

我正在创建一个 MERN 应用程序(Mongo、express、react、node)。我有一些工作正常的路由并从 mongodb 返回数据。但是,我创建了一个新控制器来访问一个单独的集合,每当我尝试在其中创建一个新文档时,我的 req.body 都会返回 undefined。

我已经像这样设置了我的 server.js:

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");

const connectDB = require("./db");

const app = express();
const apiPort = 3000;

app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());
app.use(bodyParser.json());

connectDB();

app.use("/api", require("./routes/router"));

var server = app.listen(apiPort, () => console.log(`Server running on port ${apiPort}`));

module.exports = server;

我的路由器是这样的:

const express = require("express");

const QuizController = require("../controllers/quiz-controller");
const UserController = require("../controllers/user-controller");

const router = express.Router();

// quiz routes
router.post("/quizzes", QuizController.createQuestion);
router.get("/quizzes", QuizController.getAllQuestions);
router.get("/quizzes/:quiz_name", QuizController.getQuestionsByQuiz);
router.get("/quizzes/questions/:question_id", QuizController.getQuestionById);
router.put("/quizzes/:question_id/edit", QuizController.updateQuestionById);
router.delete("/quizzes/:question_id", QuizController.deleteQuestionById);

// user routes
router.post("/users", UserController.createUser);

module.exports = router;

所有的 /quizzes 路线都工作得很好,而且我在访问身体方面没有任何问题。UserController.createUser 方法也几乎与 Quizcontroller.createQuestion 相同,所以我很困惑。

这是带有 createUser 函数的用户控制器:

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

createUser = async (err, res, req) => {
    const body = req.body;
    console.log(req.body);
    console.log(req.params);
    console.log(body);
    if (!body) {
        return res.status(400).json({
            succes: false,
            error: "You must provide a body",
        });
    }
    try {
        const newUser = new User(body);

        console.log(newUser);
        if (!newUser) {
            return res.status(400).json({ success: false, error: err });
        }

        const user = await newUser.save();
        return res
            .status(200)
            .json({ success: true, newUser: user, msg: "New user created" });
    } catch (err) {
        console.error(err.message);
        res.status(500).send("Server error");
    }
};

module.exports = { createUser };

这是我用来尝试测试的邮递员请求的图像:[1]:https ://i.stack.imgur.com/UHAK5.png

和用户模型:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const UserSchema = new Schema({
    name: {
        type: String,
        required: true,
    },
    emailAddress: {
        type: String,
        required: true,
    },
    permission: {
        type: String,
        required: true,
    },
    auth0Id: {
        type: String,
        required: true,
    },
});

module.exports = mongoose.model("users", UserSchema);

标签: javascriptnode.jsexpress

解决方案


功能参数顺序很重要。 它的

createUser = async (req, res, next) =>  // correct format

不是

createUser = async (err, res, req) // wrong format

推荐阅读