es6中的pre()无法按预期运行?

时间:2019-02-18 08:30:08

标签: javascript mongodb ecmascript-6 postman mongoose-schema

只要我包含此pre()函数,邮递员就会返回错误, 它返回一个错误,否则它将正常工作,并且所有内容都使用mongodb存储在db中。 我使用的ES6格式或任何其他格式有问题吗?

下面是代码:

// userschema是模式的名称// // SALT_I = 10 //

userSchema.pre('save', next => {
    if (this.isModified('password')) {
        bcrypt.genSalt(SALT_I, (err, salt) => {
            if (err) 
                return next(err)
            bcrypt.hash(this.password, salt, (err, hash) => {
                if (err)
                    return next(err)
                this.password = hash
                next()
            })
        })
    } else
        next()
})

这是邮递员错误:

{
    "success": false,
    "err": {}
}

这就是我正在使用以下功能发出帖子请求的情况:

app.post('/api/users/register', (req, res) => {
    const user = new User(req.body)
    user.save((err, data) => {
        if (err) return res.json({ success: false, err })
        res.status(200).json({
            success: true,
            userdata: data
        })
    })
})

1 个答案:

答案 0 :(得分:0)

您不能使用ES6传播运算符,但ES5语法可以正常工作:

userSchema.pre('save', function (next) {
    const user = this
    if (user.isModified('password')) {
        bcrypt.genSalt(SALT_I, function (err, salt) {
            if (err) {
                console.log("inside gensalt if")
                return next(err)
            }
            bcrypt.hash(user.password, salt, function (err, hash) {
                if (err) {
                    console.log("inside bcrpt hash")
                    return next(err)
                }
                user.password = hash
                next()
            })
        })
    } else
        next()
})