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

Postman发送POST请求时注册接口返回‘Something Went Wrong’问题排查

问题解决:Node.js注册接口返回"Something Went Wrong"的修复方案

错误根源分析

从给出的ValidationError可以明确三个核心问题:

  1. 字段名不匹配:Schema定义的是userName(驼峰大写N),但代码中创建用户时用了username(小写n),导致Mongoose无法识别这个必填字段。
  2. 密码字段不匹配:Schema要求存储hash_password,但代码中直接传入原始password,既不符合字段名要求,也未做哈希处理,触发必填验证失败。
  3. 请求体解析缺失:如果服务器未配置JSON解析中间件,Postman发送的JSON请求体无法被解析,导致req.body为空,进而firstName、lastName等字段取不到值,触发必填验证。

具体修复步骤

1. 修正用户创建的字段名

将创建_user对象时的username改为userName,严格匹配Schema定义:

const _user = new User({
    firstName,
    lastName,
    email,
    userName: Math.random().toString(), // 修正字段名
    // 后续补充密码哈希逻辑
});

2. 添加密码哈希处理

Schema要求存储哈希后的密码,使用bcrypt实现该逻辑:
首先安装依赖:

npm install bcrypt

然后在路由代码中引入并处理密码:

const bcrypt = require('bcrypt');

// ... 其他代码

const _user = new User({
    firstName,
    lastName,
    email,
    userName: Math.random().toString(),
    hash_password: bcrypt.hashSync(password, 10) // 对原始密码进行哈希
});

3. 配置Express JSON解析中间件

在你的Express主文件(如app.js)中,路由挂载前添加解析中间件:

const express = require('express');
const app = express();

// 解析JSON格式请求体,必须在路由之前配置
app.use(express.json());
// 可选:解析表单格式请求体
app.use(express.urlencoded({ extended: true }));

// 挂载你的路由
app.use('/api', router); // 假设路由挂载在/api路径下

4. 优化错误提示(调试用)

修改保存用户的错误返回逻辑,返回具体验证细节,方便调试:

_user.save((error, data) => {
    if (error) {
        return res.status(400).json({
            message: 'Validation Failed',
            details: Object.values(error.errors).map(item => item.message)
        });
    }
    if (data) {
        return res.status(201).json({ user: data });
    }
});

5. 验证Postman请求格式

确保Postman请求符合要求:

  • 请求头设置Content-Type: application/json
  • 请求体选择raw→JSON,传入正确字段:
{
    "firstName": "张三",
    "lastName": "李四",
    "email": "zhangsan@example.com",
    "password": "yourSecurePassword123"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:15:40