首页 > 解决方案 > NestJS 服务中的自定义 TypeORM 错误

问题描述

我正在玩NestJS,我想把抛出的错误TypeORM转换成我可以控制的形状。

现在,我只是试图捕捉抛出的错误TypeORM并将其注销以查看我的自定义过滤器是否正常工作。但不幸的是,我console.log在过滤器中的声明从不记录。

这是我的服务和过滤器的精简版

用户服务.ts

export class UserService {
  constructor(
    @InjectRepository(Users)
    private readonly userRepository: Repository<Users>,
  ) {}

  @UseFilters(new TypeOrmFilter())
  async create(createUserDto: CreateUserDto) {
    const user = this.userRepository.create(createUserDto);
    return this.userRepository.save(user);
  }
}

类型-orm-filter.ts

@Catch()
export class TypeOrmFilter implements ExceptionFilter {
  catch(exception: Error, host: ArgumentsHost) {
    console.log('\nI have caught an error\n', exception);
    throw exception;
  }
}

这是引发的错误的日志输出TypeORM

[Nest] 61496   - 04/11/2021, 9:01:42 PM   [ExceptionsHandler] invalid input syntax for type uuid: "123e4567" +2482ms
QueryFailedError: invalid input syntax for type uuid: "123e4567"
    at new QueryFailedError (my-nest-project/error-project-nestjs/node_modules/typeorm/error/QueryFailedError.js:11:28)
    at PostgresQueryRunner.<anonymous> (my-nest-project/error-project-nestjs/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:247:31)
    at step (my-nest-project/error-project-nestjs/node_modules/typeorm/node_modules/tslib/tslib.js:141:27)
    at Object.throw (my-nest-project/error-project-nestjs/node_modules/typeorm/node_modules/tslib/tslib.js:122:57)
    at rejected (my-nest-project/error-project-nestjs/node_modules/typeorm/node_modules/tslib/tslib.js:113:69)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

标签: nestjstypeorm

解决方案


你错过了awaitUserService#createp

提示:如果你正确配置 ESLint,这可能永远不会再发生,因为你已经用await( https://eslint.org/docs/rules/require-await ) 标记了该方法。或者只是强制输入返回(https://github.com/typescript-eslint/typescript-eslint/blob/v3.10.1/packages/eslint-plugin/docs/rules/explicit-module-boundary-types.md


推荐阅读