#node.js #mongoose #nestjs
#node.js #мангуст #nestjs
Вопрос:
У меня есть приложение NestJS (версия 7), которое оно использует mongoose
. Установленными пакетами являются @nestjs/mongoose
и mongoose
.
Я хочу создать ExceptionFilter, который будет улавливать mongoose
ошибки.
@Post('/register')
@HttpCode(201)
@UseFilters(MongoExceptionFilter)
@UsePipes(new ValidationPipe({ whitelist: true }))
async register(){}
И MongoExceptionFilter
@Catch(MongoError)
export class MongoExceptionFilter implements ExceptionFilter {
......
}
Проблема в том, что я не могу импортировать MongoError из mongodb
, потому что он не будет работать, как упоминалось здесь .
Вопрос в том, откуда я должен импортировать это MongoError
, чтобы NestJS перехватывал ошибки, которые выдает mongoose. Из того, что я вижу, ни mongoose
один, ни @nestjs/mongoose
один не раскрывает этот объект.
Обновить
https://github.com/GeoPablo/nest-demo-mongo — вот репозиторий GitHub
Комментарии:
1. можете ли вы поделиться своим package.json?
Ответ №1:
Ошибка импорта из пакета mongoose.
import { Error } from 'mongoose';
Из официальных документов Mongoose :
В фильтре исключений гнезда :
import { Error } from 'mongoose';
import { ArgumentsHost, Catch, ExceptionFilter} from '@nestjs/common';
@Catch(Error)
export class MongooseExceptionFilter implements ExceptionFilter {
constructor(//Dependencies){}
catch(exception: Error, host: ArgumentsHost) {
//exception.name will be one of the strings mentioned in the
//Error Names in Mongoose link
const exceptionType = exception.name;
//handleException...
}
}
Теперь, чтобы ответить на ваш вопрос:
Вопрос в том, откуда я должен импортировать этот MongoError, чтобы NestJS перехватывал ошибки, которые выдает mongoose. Из того, что я вижу, ни mongoose, ни @nestjs /mongoose не раскрывают этот объект.
NestJS просто оборачивает mongoose
пакет, чтобы его можно было использовать в качестве импортируемого модуля. Он не изменяет и не работает с mongodb. Вот почему у вас все еще есть install mongoose вместе с ним. Таким образом, из пакета не будет ошибки, связанной с mongo @nestjs/mongoose
. Что касается MongoError
, Mongoose обрабатывает MongoError
и аккуратно представляет его по-своему (см. Ошибки в ссылке Mongoose) и выдает его. Я не думаю, что есть способ импортировать native MongoError
из пакета mongoose или сделать mongoose throw native MongoError
вместо своего собственного Error
. Я не изучал это, я обновлю, если есть способ.
Приведенный выше код должен работать. Я его не тестировал. Но я предлагаю шаблон репозитория, в котором вы обрабатываете все исключения, связанные с постоянным хранилищем (в данном случае mongodb с mongoose) на уровне репозитория. Контекст вашего приложения мне неясен, но это лучшая практика, когда дело доходит до большинства приложений.