我在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})...时错误对象未得到正确对待的事实。