node.js - 保存用户时MongoDB无效的电子邮件和密码
问题描述
当我尝试创建新用户时,我遇到了一个问题,我收到以下错误:
ValidationError: User validation failed: 0.password: Path
0.密码 0.is required., 0.email: Path
邮箱is required.
现在端点过去可以工作,我认为它与数据库本身有关,但我一生都无法弄清楚该怎么做。
我当然传递了有效数据。
这是模型和有效载荷:
import mongoose from 'mongoose';
import BaseSchema from '../utils/schema';
import bcrypt from 'bcrypt';
const userSchema = BaseSchema({
email:{
type:String,
required:true,
unique:true,
trim: true,
lowercase:true
},
password:{
type:String,
required:true
},
firstName:String,
lastName:String
});
userSchema.virtual('name').get(function(){
return `${this.firstName} ${this.lastName}`;
});
userSchema.pre('save', function(next) {
bcrypt.hash(this.password, 10, (err, hash) => {
if (err) {
return next(err);
}
this.password = hash;
next();
});
});
const User = mongoose.model('User', userSchema);
export default User;
并且要保存的有效负载(这是在保存之前调试的)是:
{ email: 'somevalidemail@gmail.com',
password:
'$2b$10$oQN7i5AKYDyPLp.DefeRjuyh9Z7JLayPjTO4I3B6NvytM0vq2YnVG',
firstName: 'Cool',
lastName: 'Cat' }
有人可以帮忙吗?
解决方案
最终找出了问题所在。有两个:
- BaseSchema(此处未列出)存在字段未正确传递的问题。
- 然后有一个错误:
E11000 duplicate key error index: chat-app1.users.$0.email_1 dup key: { : null }'
这让我相信这是一个索引问题。转储集合索引
修复基础并清除索引后,一切都恢复正常
推荐阅读
- javascript - 使用 React 版本 17.xx 的 PWA
- javascript - 将 Alpine 组件转换为 React
- string - 如何将字符串格式与数组/列表结合起来?
- javascript - 如何在 Express 中发送响应
- angular - 如何在 ngx-editor 的 Div 内容中使用样式
- graph - 在无向图中检测循环的方法的逻辑
- docker - 无法扩展父级的入口点
- mysql - 如何优化复杂计算查询的执行时间?
- javascript - 如何在 react js 中使用 redux 设置提交时 api 的响应。
- javascript - React Native d3方位角等面积旋转不平滑