Mongoose MongoError的NestJS异常筛选器返回未处理的PromisejectionWarning

Mongoose MongoError的NestJS异常筛选器返回未处理的PromisejectionWarning,mongoose,nestjs,Mongoose,Nestjs,我正试图通过Mongoose为Mongo错误创建一个自定义异常过滤器。当我使用过滤器时,会出现未处理的PromisejectionWarning,并且不会给出任何结果。你知道我该怎么解决这个问题吗 错误:未处理的PromisejectionWarning:TypeError:“instanceof”的右侧不是对象 users.controller.ts import { Body, Controller, Post, UseFilters } from '@nestjs/common'; imp

我正试图通过Mongoose为Mongo错误创建一个自定义异常过滤器。当我使用过滤器时,会出现未处理的PromisejectionWarning,并且不会给出任何结果。你知道我该怎么解决这个问题吗

错误:
未处理的PromisejectionWarning:TypeError:“instanceof”的右侧不是对象

users.controller.ts

import { Body, Controller, Post, UseFilters } from '@nestjs/common';
import { UsersService } from './users.service';
import { RegisterUserDto } from './dto/register-user.dto';
import { MongooseExceptionFilter } from './filters/mongoose-exception.filter';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @UseFilters(MongooseExceptionFilter)
  @Post('register')
  register(@Body() registerDto: RegisterUserDto) {
    return this.usersService.create(registerDto);
  }
}
import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { Request, Response } from 'express';
import { MongoError } from 'mongoose';

@Catch(MongoError)
export class MongooseExceptionFilter implements ExceptionFilter {
  catch(exception: MongoError, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    // const status = exception.getStatus();
    console.log('Exception', exception);

    response
      .status(418)
      .json({
        statusCode: 418,
        timestamp: new Date().toISOString(),
        path: request.url,
      });
  }
}
猫鼬异常.filter.ts

import { Body, Controller, Post, UseFilters } from '@nestjs/common';
import { UsersService } from './users.service';
import { RegisterUserDto } from './dto/register-user.dto';
import { MongooseExceptionFilter } from './filters/mongoose-exception.filter';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @UseFilters(MongooseExceptionFilter)
  @Post('register')
  register(@Body() registerDto: RegisterUserDto) {
    return this.usersService.create(registerDto);
  }
}
import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { Request, Response } from 'express';
import { MongoError } from 'mongoose';

@Catch(MongoError)
export class MongooseExceptionFilter implements ExceptionFilter {
  catch(exception: MongoError, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    // const status = exception.getStatus();
    console.log('Exception', exception);

    response
      .status(418)
      .json({
        statusCode: 418,
        timestamp: new Date().toISOString(),
        path: request.url,
      });
  }
}
从'@nestjs/common'导入{ExceptionFilter,Catch,ArgumentsHost};
从“express”导入{Request,Response};
从“猫鼬”导入{MongoError};
@捕获(MongoError)
导出类MongooseeExceptionFilter实现ExceptionFilter{
捕获(异常:MongoError,主机:ArgumentsHost){
const ctx=host.switchToHttp();
const response=ctx.getResponse();
const request=ctx.getRequest();
//const status=exception.getStatus();
log('Exception',Exception);
回答
.现状(418)
.json({
状态代码:418,
时间戳:新日期().toISOString(),
路径:request.url,
});
}
}
问题在于mongoose软件包中没有直接提供“MongoError”,并且mongodb软件包中的MongoError与mongoose使用的软件包不同。解决方案非常简单,在
mongoose exception.filter.ts
文件中,我将导入更改为:

import { MongoError } from 'mongoose/node_modules/mongodb';