pre () в es6 не работает должным образом? - PullRequest
0 голосов
/ 18 февраля 2019

Почтальон возвращает ошибку всякий раз, когда я включаю эту функцию pre (), она возвращает ошибку, иначе она работает, и все хранится в БД с помощью mongodb.Что-то не так в формате 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 голосов
/ 19 февраля 2019

Вы не можете использовать оператор распространения 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()
})
...