使用Postman发送JSON数据到数据库时遇500内部服务器错误
问题描述
使用Postman向数据库发送JSON数据时触发500内部服务器错误,已确认数据库连接与Schema配置正常。
相关代码
userControllers.js
const asyncHandler = require("express-async-handler"); const User = require("../models/userModel"); const alert = require("alert"); const generateToken = require("../config/generateToken"); const registerUsers = asyncHandler(async (req, res) => { const { name, email, password, pic } = req.body; if (!email || !name || !password) { res.status(400); throw new Error("Please Enter All fields"); } const userExists = await User.findOne({ email, }); if (userExists) { res.status(400); throw new Error("User already exists"); } const user = await User.create({ name, email, password, pic }); if (user) { res.status(400).json({ _id: user._id, name: user.name, email: user.email, password: user.password, pic: user.pic, token: generateToken(user_id), }); } else { res.status(400); throw new Error("Failed to create the account, try again after some time."); } }); const authUser = asyncHandler(async (req, res) => {}); module.exports = { registerUsers };
userRoutes.js
const { registerUsers } = require("../controllers/userControllers"); const express = require("express"); const router = express.Router(); router.post("/", registerUsers); // router.route("/login").post(authUser); module.exports = router;
server.js
app.use("/api/user", userRoutes);
请求数据
向/api/user/发送POST请求,数据如下:
{ "name": "joseph ngatia", "email": "jngatia@gmail.com", "password": "12345" }
错误信息
ValidationError: User validation failed: name: Path `name` is required., email: Path `email` is required., password: Path `password` is required. at Document.invalidate (C:\Users\User\MERN App\node_modules\mongoose\lib\document.js:3147:32) at C:\Users\User\MERN App\node_modules\mongoose\lib\document.js:2940:17 at C:\Users\User\MERN App\node_modules\mongoose\lib\schematype.js:1350:9 at process.processTicksAndRejections (node:internal/process/task_queues:77:11)
解决方法
添加JSON解析中间件
Express默认不解析JSON请求体,导致req.body为空对象,name/email/password取值均为undefined,触发Mongoose必填字段验证错误。在server.js中路由注册前添加:app.use(express.json());修正Token生成的变量名
代码中generateToken(user_id)的user_id是未定义变量,需改为user._id:token: generateToken(user._id),修正成功响应状态码
用户创建成功应返回201(资源创建成功)而非400(错误状态码),同时建议移除明文密码返回(存在安全风险):res.status(201).json({ _id: user._id, name: user.name, email: user.email, pic: user.pic, token: generateToken(user._id), });
内容的提问来源于stack exchange,提问作者Joseph Ngatia
相关产品推荐
相关产品推荐

