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

Postman调用Register API无法传递数据,验证失败求助

问题:Postman发送POST请求到注册API时,请求体数据无法传递,触发必填字段验证错误

我用Postman向Register API发送POST请求,但数据始终传不过去,触发了User模型的必填字段验证错误。试过调整Postman设置、修改验证规则都没用,我是JavaScript新手,求帮忙。


Register API代码

app.use(express.json()); // 中间件

app.post("/register", async (req, res) => {
    try {
      const newUser = await User.create(req.body);
      res.status(200).json(newUser); // 返回新建的用户信息
    } catch (error) {
      res.status(500).json({ message: error.message });
    }
  });

User模型代码

const mongoose = require("mongoose");
const bcrypt = require("bcrypt");

const validateEmail = function (email) {
  const emailRegex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
  return emailRegex.test(email);
};

const UserSchema = mongoose.Schema({
  name: {
    type: String,
    required: [true, "请输入你的姓名"],
  },
  email: {
    type: String,
    required: [true, "请输入你的邮箱"],
    validate: {
      validator: validateEmail,
      message: "请填写有效的邮箱地址",
    },
  },
  password: {
    type: String,
    required: [true, "请输入你的密码"],
  },
});

UserSchema.pre("save", async function (next) {
  try {
    const salt = await bcrypt.genSalt(10);
    const hashedPassword = await bcrypt.hash(this.password, salt);
    this.password = hashedPassword;
    next();
  } catch (error) {
    next(error);
  }
});

const User = mongoose.model("User", UserSchema);

module.exports = User;

请求信息

请求头

Request Headers
Content-Type: application/json
User-Agent: PostmanRuntime/7.33.0
Accept: */*
Postman-Token: 5da77db1-867b-4919-a02d-c343704b6eb2
Host: localhost:3000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 99

请求体

{
    "name":"pratik",
    "email":"zajampratik@gmail.com",
    "password":"PratikZajam@1999"
}

响应信息

响应头

X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 136
ETag: W/"88-VEpd9WSTE7wFAEzw7xIMM06sJpo"
Date: Wed, 04 Oct 2023 09:55:22 GMT
Connection: keep-alive
Keep-Alive: timeout=5

响应体

{
    "message": "User validation failed: password: Please Enter Your Password, email: Please Enter Your Email, name: Please Enter Your Name"
}

排查与解决方法

  1. 确认express.json()中间件的位置
    app.use(express.json())必须放在所有路由定义之前,否则路由无法解析JSON请求体。如果路由在其他文件中,要确保这个中间件在引入路由前就注册,示例:

    const express = require('express');
    const app = express();
    
    // 先注册JSON解析中间件
    app.use(express.json());
    
    // 再引入并注册路由
    app.use('/', require('./routes/register'));
    
  2. 检查Postman请求体格式
    即使设置了Content-Type: application/json,也要确认Postman的请求体选择raw -> JSON格式,而非form-data或x-www-form-urlencoded,选错格式会导致请求体无法被正确解析。

  3. 验证req.body是否为空
    在注册路由中添加日志,查看实际接收的请求体内容:

    app.post("/register", async (req, res) => {
        console.log('接收的请求体:', req.body); // 打印请求体
        try {
          const newUser = await User.create(req.body);
          res.status(200).json(newUser);
        } catch (error) {
          res.status(500).json({ message: error.message });
        }
      });
    

    如果控制台打印{}或undefined,说明确实未解析到请求体,回到第一步检查中间件位置。

  4. 排查中间件冲突
    若项目中安装了旧版body-parser,可能会与Express内置的express.json()冲突。现在Express已内置JSON解析功能,可卸载body-parser避免冲突。

内容的提问来源于stack exchange,提问作者Pratik zajam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:40:34