Я хочу создать приложение с помощью Nest Js и TypeORM, используя MongoDB. Давайте предположим, что у меня есть объект с двумя уникальными полями, кроме поля идентификатора
@Entity()
export class Module extends BaseEntity {
@ObjectIdColumn()
public id: ObjectID;
@Column({ unique: true })
public moduleName: string;
@Column({ unique: true })
public displayName: string;
}
Когда я хочу создать новый модуль с уже существующим moduleName
или displayName
, я получаю следующее исключение ошибка
[Nest] 6624 - 2020-02-20 16:31:36 [ExceptionsHandler] E11000 duplicate key error collection: test-mongo.module index: UQ_61128bd419e3c3a6d8d7d565ed9 dup key: { moduleName: "firstModule" } +23849ms
BulkWriteError: E11000 duplicate key error collection: test-mongo.module index: UQ_61128bd419e3c3a6d8d7d565ed9 dup key: { moduleName: "firstModule" }
at OrderedBulkOperation.handleWriteError (C:\Users\mhermsen\Gitlab Repositories\server\node_modules\mongodb\lib\bulk\common.js:1210:11)
at resultHandler (C:\Users\mhermsen\Gitlab Repositories\server\node_modules\mongodb\lib\bulk\common.js:519:23)
at C:\Users\mhermsen\Gitlab Repositories\server\node_modules\mongodb\lib\core\connection\pool.js:404:18
at processTicksAndRejections (internal/process/task_queues.js:76:11)
Так что в моем операторе catch я должен обработать входящие ошибки. Что мне нужно сделать, это
try {
// create module
} catch (error) {
if (/* error is TypeORM error */) {
if (/* wrong attribute is the module name */) {
// module name exists ...
}
if (/* wrong attribute is the display name */) {
// display name exists ...
}
}
}
Предоставляет ли TypeORM готовые исключения? Могу ли я использовать перечисление? Какой будет хороший подход для извлечения этих ошибок базы данных TypeORM?
Кажется, здесь перечислены некоторые ошибки
https://github.com/typeorm/typeorm/tree/master/src/error
но я не могу импортировать их, и я не нашел ничего о BulkWriteError
В моем операторе catch можно сделать что-то вроде
const code: number = error.code;
if (code === 11000) {
throw new ConstraintException(error.errmsg);
}
throw error;
, но как вы знаю, что это не лучший подход. Также этот объект ошибки не сообщает мне, является ли moduleName
или displayName
недействительным. Просто внутри строки
errmsg: 'E11000 Коллекция дубликатов ошибок ключа: test-mon go .module index: UQ_61128bd419e3c3a6d8d7d565ed9 dup key: {moduleName: "firstModule"}',
Должен ли я создавать свое собственное отображение из этих кодов ошибок в исключения?