簡體   English   中英

node.js req.body 返回未定義(已解決)

[英]node.js req.body returning undefined (solved)

編輯:@LawrenceCherone 解決了這個問題,它的 (req, res, next) 不是 (err, res, req)

我正在創建一個 MERN 應用程序(Mongo、express、react、node)。 我有一些工作正常並從 mongodb 返回數據的路線。 但是我創建了一個新的 controller 來訪問一個單獨的集合,每當我嘗試在其中創建一個新文檔時,我的 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 function 的用戶控制器:

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 };

這是我用來嘗試測試的 postman 請求的圖像:[1]: https://i.stack.imgur.com/UHAK5.png

而用戶 model:

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);

功能參數順序很重要。 它的

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

不是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM