Узлы: получение свойства undefined не приводит к ошибке - PullRequest
0 голосов
/ 12 ноября 2018

Я столкнулся со странной проблемой в приложении 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}) ...

...