Mongodb用户架构错误

Mongodb用户架构错误,mongodb,express,mean-stack,Mongodb,Express,Mean Stack,我正试图使用邮递员发送数据通过和创建我的用户。但是我不断地得到一个错误,所以我注释掉了一些真正不需要的代码,现在我得到了这个错误。有人知道我可能做错了什么吗 Mongodb已连接,服务器正在端口3000上运行。错误表明您正在将无效参数传递给bcrypt.hash(),即未定义,而不是密码。检查是否定义了req.body.password。错误表明您正在将无效参数传递给bcrypt.hash(),即未定义的,而不是密码。检查是否定义了req.body.password。在addUser函数中捕

我正试图使用邮递员发送数据通过和创建我的用户。但是我不断地得到一个错误,所以我注释掉了一些真正不需要的代码,现在我得到了这个错误。有人知道我可能做错了什么吗


Mongodb已连接,服务器正在端口3000上运行。

错误表明您正在将无效参数传递给
bcrypt.hash()
,即
未定义
,而不是密码。检查是否定义了
req.body.password

错误表明您正在将无效参数传递给
bcrypt.hash()
,即
未定义的
,而不是密码。检查是否定义了
req.body.password

在addUser函数中捕获newUser.password之前,请确保创建console.log(newUser)。在使用数据启动新的用户模式后,对象不会像您预期的那样出现。或者简单地从您自己的字符串中输入一个salt pass,然后检查它是否工作正常。

在addUser函数中捕获newUser.password之前,请确保创建一个console.log(newUser)。在使用数据启动新的用户模式后,对象不会像您预期的那样出现。或者简单地从您自己的字符串中输入一个字符串,然后检查它是否工作正常。

如前所述,您在第63行中有错误:

bcrypt.hash(newUser.password,salt,(err,hash=>{

因为变量密码未定义的。 尝试手动定义它,并确保您编写的代码正确执行

但我强烈建议您仔细查看并使用它生成salt密码

在您的例子中,您可以使用mongoose和bcrypt对这个代码段执行相同的工作

//首先,在模式中将“password”重命名为“clean_password”

user.virtual('clean_password')
    .set(function(clean_password) {
        this._password = clean_password;
        this.password = this.encryptPassword(clean_password);
    })
    .get(function() {
        return this._password;
    });

user.methods = {

    /**
     * Authenticate - check if the passwords are the same
     *
     * @param {String} plainText
     */
    authenticate: function(plainPassword) {
        return bcrypt.compareSync(plainPassword, this.password);
    },

    /**
     * Encrypt password
     *
     * @param {String} password
     */
    encryptPassword: function(password) {
        if (!password)
            return '';

        return bcrypt.hashSync(password, 10);
    }
};
并通过以下方式进行检查:

var user = {
    username: "whateveryouwant",
    clean_password: "whateveryouneed"
}

User.create(user, function(err,doc){});
如前所述,您在第63行有错误:

bcrypt.hash(newUser.password,salt,(err,hash=>{

因为变量密码未定义的。 尝试手动定义它,并确保您编写的代码正确执行

但我强烈建议您仔细查看并使用它生成salt密码

在您的例子中,您可以使用mongoose和bcrypt对这个代码段执行相同的工作

//首先,在模式中将“password”重命名为“clean_password”

user.virtual('clean_password')
    .set(function(clean_password) {
        this._password = clean_password;
        this.password = this.encryptPassword(clean_password);
    })
    .get(function() {
        return this._password;
    });

user.methods = {

    /**
     * Authenticate - check if the passwords are the same
     *
     * @param {String} plainText
     */
    authenticate: function(plainPassword) {
        return bcrypt.compareSync(plainPassword, this.password);
    },

    /**
     * Encrypt password
     *
     * @param {String} password
     */
    encryptPassword: function(password) {
        if (!password)
            return '';

        return bcrypt.hashSync(password, 10);
    }
};
并通过以下方式进行检查:

var user = {
    username: "whateveryouwant",
    clean_password: "whateveryouneed"
}

User.create(user, function(err,doc){});

该错误似乎在抱怨user.js中第63行附近的变量未定义。您是否考虑过在该点使用console.log输出每个变量以查看每个变量包含的内容?该错误似乎在抱怨user.js中第63行附近的变量未定义。您是否考虑过使用console.log退出把每个变量放在那个点上,看看每个变量包含什么?