Как поймать все типы sequelize Error

Я использую sequelize@4.8.0 с expressJS.

Я понимаю, как поймать определенный тип secelize Error и работает хорошо.

return db.mySequel.transaction(t => {
    return db.users.findOrCreate({
        ...,
        transaction: t
    }).spread((rs, created) => {
        if (created == false) throw new Error("00001");
        return db.misc.bulkCreate([
            {
                ...
            },
            {
                ...
            }
        ], {
            transaction: t,
            raw: true
        });
    })
}).then(rs => {
    res.json(rs);
}).catch(db.mySequel.ForeignKeyConstraintError, err => {
   ... 
}).catch(err => {
   ...
});

Но этот процесс транзакций запросов также вызывает пользовательские экземпляры ошибок. Поэтому я хочу поймать все типы Sequelize Error отдельно от моих ошибок.

Может быть, я могу сделать больше цепей catch, Это кажется многословным. Я пробовал, .catch(db.mySequel.BaseErrorно не очень полезен.

node.js,sequelize.js,

0

Ответов: 2


1

Вместо того, чтобы использовать несколько блоков catch, используйте один, а затем проверяйте instanceofобъект, чтобы определить, как обрабатывать исключение.

.catch(err => {
  if (err instanceof db.mySequel.ForeignKeyConstraintError) {
    // handle foreign key constraint
  } else {
    // handle other error
  }
});

0 принят

Я нашел отношение наследования между классами ошибок, как упомянуто в документе.

и я мог поймать связь с Object.getInstanceOf()методом. __proto__свойство может иметь смысл, но я предпочитаю более строгое правило. (Хотя __proto__ усыновлен большинством движка javascript. Это просто стандарт De facto .)

Так я сделал:

var names = [];
(function p (inst) {
    if (inst != null) {
        var ofProto = Object.getPrototypeOf(inst);
        names.push(ofProto.constructor.name);
        p(ofProto);
    }
})(err);
console.log(names)
// ["ForeignKeyConstraintError", "DatabaseError", "BaseError", "Error", "Object"]

Теперь можно узнать, откуда исходит ошибка.

Node.js, sequelize.js,
Похожие вопросы
Яндекс.Метрика