Обработка ошибки Mongoose используя Async

Решил вместо колбеков использовать async/await, но как-то не пошло. В общем-то есть метод create у модели пользователя, который хеширует пароль и создаёт запись в БД, если пользователя с таким именем нет.

Суть ошибки: В контроллере обрабатываю с помощью Catch создание пользователя, но ошибку он выдаёт именно в консоли ноды и catch не работает

Контроллер

const User = require('../models/User');

exports.index = async (req, res) => {
    const user = new User({
        name: req.body.name,
        password: req.body.password
    });
    try {
        await User.create(user);
        await res.json({
            success: true,
            message: "Пользователь успешно создан"
        })
    } catch (e) {
        await res.json({
            success: false,
            message: "Что-то пошло не так"
        });
    }

};

Модель

const bcrypt = require('bcrypt');

const userSchema = mongoose.Schema({
    name: {
        type: String,
        length: 40,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    }
});

const User = module.exports = mongoose.model('User', userSchema);

module.exports.create = (user) => {
    bcrypt.genSalt(10, function (err, salt) {
        bcrypt.hash(user.password, salt, function (err, hash) {
            if (err) throw err;
            user.password = hash;
            return user.save();
        });
    });
};

module.exports.getByName = (name, callback) => {
    User.findOne({name}, callback);
};


Ответы (1 шт):

Автор решения: Alexander Chernykh

Спасибо @nörbörnën за помощь!

Переписал функцию по асинхронному и всё заработало

module.exports.create = async (user) => {
    const hashedPassword = await bcrypt.hash(user.password, 12);
    const newUser = new User({ name: user.name, password: hashedPassword });
    await user.save();
};
→ Ссылка