Я столкнулся со странной проблемой в приложении 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
}
Как видите, я забыл потребовать модуль "util" для nodejs.использование util.promisify должно выдать ошибку «невозможно вызвать promisify of undefined» или что-то в этом роде.Но ничего не происходит.Это, конечно, изменится, если я поместу вызов 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}) ...