首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NestJS句柄MongoError

NestJS句柄MongoError
EN

Stack Overflow用户
提问于 2020-09-19 21:53:51
回答 1查看 163关注 0票数 1

我有一个使用mongoose的NestJS应用程序(版本7)。安装的包是@nestjs/mongoosemongoose

我想创建一个捕获mongoose错误的ExceptionFilter。

代码语言:javascript
运行
复制
 @Post('/register')
 @HttpCode(201)
 @UseFilters(MongoExceptionFilter)
 @UsePipes(new ValidationPipe({ whitelist: true }))
 async register(){}

和MongoExceptionFilter

代码语言:javascript
运行
复制
@Catch(MongoError)
export class MongoExceptionFilter implements ExceptionFilter {
......
}

问题是我不能从mongodb导入MongoError,因为它不能工作,正如前面提到的here

问题是,我应该从哪里导入这个MongoError,以便NestJS能够捕获mongoose抛出的错误。据我所知,mongoose@nestjs/mongoose都没有公开这个对象。

更新

https://github.com/GeoPablo/nest-demo-mongo -这是一个GitHub存储库

EN

回答 1

Stack Overflow用户

发布于 2021-08-17 04:10:31

从mongoose包导入时出错。

import { Error } from 'mongoose';

来自Mongoose官方文档的 :

  1. Errors in Mongoose
  2. Error Names in Mongoose

嵌套异常筛选器中的 :

代码语言:javascript
运行
复制
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)相关的异常。你的应用程序的上下文对我来说是不清楚的,但对于大多数应用程序来说,这是最佳实践。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63969556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档