Node.js:获取未定义的属性不会引发错误

时间:2018-11-12 17:42:38

标签: node.js express error-handling async-await try-catch

我在Express应用程序中遇到一个奇怪的问题:尝试获取不存在的对象的属性时,不会引发任何错误。

我有一个文件,代码如下:

const bcrypt = require('bcrypt-nodejs');

const hashPassword = async (password) => {

   const bcryptGenSalt = util.promisify(bcrypt.genSalt);
   const bcryptHash = util.promisify(bcrypt.hash);

    try {
        const salt = await bcryptGenSalt(10);
        const hash = await bcryptHash(password, salt, null)

        return hash;

    } catch (error) {      
        throw error;
    }


}

module.exports = {
    hashPassword
}

如您所见,我忘记了需要nodejs的“ util”模块。使用util.promisify会引发错误“无法调用未定义的Promisify”或类似的错误。但是什么也没发生。如果我将util.promisify调用放在try-catch块中,这当然会改变,但是据我了解,它应该会抛出一个错误。

这是在另一个文件(控制器)中使用此功能的代码:

const registerNewUser = async (req, res, next) => {  

const email = req.body.email;
const password = req.body.password;

try {
    console.log('before trying to hash')
    //THIS IS WHERE I AWAIT THE PROMISE RETURNED FROM THE "PROBLEMATIC" FUNCTION  
    var hashedPassword = await hashPassword(password)     
} catch (error) {
    return res.send({ error });
}


const user = new User({
    email,
    password:hashedPassword
})

try {

    const newUser = await user.save();
    res.json({
        error: null,
        data: {
            id: newUser._id
        }
    })
} catch (error) {
    res.status(422).send({ error: 'Email already taken' });       
}

}

错误没有到达catch块,并且程序继续运行,从而导致不良行为。有人可以解释这是怎么回事吗?

已解决:问题是由于某种原因,我在邮递员响应中收到一个空错误,使我认为没有发现任何错误。似乎一切正常,除了在我做res.send({error})...时错误对象未得到正确对待的事实。

0 个答案:

没有答案