You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)

解决方法

  1. 添加JSON解析中间件
    Express默认不解析JSON请求体,导致req.body为空对象,name/email/password取值均为undefined,触发Mongoose必填字段验证错误。在server.js中路由注册前添加:

    app.use(express.json());
    
  2. 修正Token生成的变量名
    代码中generateToken(user_id)的user_id是未定义变量,需改为user._id:

    token: generateToken(user._id),
    
  3. 修正成功响应状态码
    用户创建成功应返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:05:35