Postman发送POST请求时注册接口返回‘Something Went Wrong’问题排查
问题解决:Node.js注册接口返回"Something Went Wrong"的修复方案
错误根源分析
从给出的ValidationError可以明确三个核心问题:
- 字段名不匹配:Schema定义的是
userName(驼峰大写N),但代码中创建用户时用了username(小写n),导致Mongoose无法识别这个必填字段。 - 密码字段不匹配:Schema要求存储
hash_password,但代码中直接传入原始password,既不符合字段名要求,也未做哈希处理,触发必填验证失败。 - 请求体解析缺失:如果服务器未配置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
相关产品推荐
相关产品推荐

