首页 > 解决方案 > 保存用户时MongoDB无效的电子邮件和密码

问题描述

当我尝试创建新用户时,我遇到了一个问题,我收到以下错误:

ValidationError: User validation failed: 0.password: Path0.密码 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' }

有人可以帮忙吗?

标签: node.jsmongodbmongoose

解决方案


最终找出了问题所在。有两个:

  1. BaseSchema(此处未列出)存在字段未正确传递的问题。
  2. 然后有一个错误:E11000 duplicate key error index: chat-app1.users.$0.email_1 dup key: { : null }' 这让我相信这是一个索引问题。转储集合索引

修复基础并清除索引后,一切都恢复正常


推荐阅读