javascript - 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);
解决方案
功能参数顺序很重要。 它的
createUser = async (req, res, next) => // correct format
不是
createUser = async (err, res, req) // wrong format
推荐阅读
- vba - 公式拖拽查询
- ibm-cloud - 尝试从 IBM Cloud 控制台供应 Analytics Engine 时出错:BXNIM0511E
- gensim - 动态主题模型的评估
- netbeans - Netbeans 代号一更改发送构建的位置
- javascript - Java中的AES加密无法在Javascript中解密
- javascript - vuetify 标签与芯片使用,而不是按回车
- spring - jUnit:没有找到接口 com.querydsl.core.types.Predicate 的主要或默认构造函数
- c# - 优雅的 List 初始化方式
- > 在 C# 中
- asp.net - 我正在尝试为我的 gridview 中的过期项目显示背景红色但无法使用 asp.net
- javascript - 如何使用 ReactJS 向表格中添加新元素