我有一个使用mongoose的NestJS应用程序(版本7)。安装的包是@nestjs/mongoose和mongoose。
我想创建一个捕获mongoose错误的ExceptionFilter。
@Post('/register')
@HttpCode(201)
@UseFilters(MongoExceptionFilter)
@UsePipes(new ValidationPipe({ whitelist: true }))
async register(){}和MongoExceptionFilter
@Catch(MongoError)
export class MongoExceptionFilter implements ExceptionFilter {
......
}问题是我不能从mongodb导入MongoError,因为它不能工作,正如前面提到的here。
问题是,我应该从哪里导入这个MongoError,以便NestJS能够捕获mongoose抛出的错误。据我所知,mongoose和@nestjs/mongoose都没有公开这个对象。
更新
https://github.com/GeoPablo/nest-demo-mongo -这是一个GitHub存储库
发布于 2021-08-17 04:10:31
从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,也不使用mongodb。这就是为什么你仍然需要安装mongoose的原因。因此,不会有来自@nestjs/mongoose包的与mongo相关的错误。至于MongoError,Mongoose处理MongoError,并以自己的方式整齐地呈现它(在Mongoose链接中引用错误),然后抛出它。我认为没有办法从mongoose包中导入原生MongoError,或者让mongoose抛出原生MongoError而不是自己的Error。我还没有调查过,如果有办法我会更新的。
上面的代码应该可以工作。我还没有测试过。但我建议使用存储库模式来处理repo层中所有与持久存储(在本例中是mongodb)相关的异常。你的应用程序的上下文对我来说是不清楚的,但对于大多数应用程序来说,这是最佳实践。
https://stackoverflow.com/questions/63969556
复制相似问题