gpt4 book ai didi

typescript - 如何使用 nestjs 处理 Mongoose 错误

转载 作者:行者123 更新时间:2023-12-03 18:04:06 25 4
gpt4 key购买 nike

我遵循了 https://docs.nestjs.com/techniques/mongodb 中的示例

问题是出现 Mongoose 验证错误时(例如,我有一个带有必填字段的架构,但未提供):

来自 games.service.ts:

  async create(createGameDto: CreateGameDto): Promise<IGame> {
const createdGame = new this.gameModel(createGameDto);
return await createdGame.save();
}

save() 函数返回一个 Promise。

现在我在 game.controller.ts 中有这个
  @Post()
async create(@Body() createGameDto: CreateGameDto) {
this.gamesService.create(createGameDto);
}

处理错误然后返回具有不同 http 状态和 json 文本的响应的最佳方法是什么?
你通常会抛出一个 HttpException但从哪里来?如果我在 promise 中使用 .catch() 处理错误,我就不能这样做。

(刚开始使用nestjs框架)

最佳答案

首先,您忘记添加 return在 Controller 内的 create 方法中。这是一个常见的、非常具有误导性的错误,我犯了上千次并花了我几个小时来调试。

要捕获异常:

您可以尝试使用 @Catch 来捕获 MongoError .

对于我的项目,我正在执行以下操作:

import { ArgumentsHost, Catch, ConflictException, ExceptionFilter } from '@nestjs/common';
import { MongoError } from 'mongodb';

@Catch(MongoError)
export class MongoExceptionFilter implements ExceptionFilter {
catch(exception: MongoError, host: ArgumentsHost) {
switch (exception.code) {
case 11000:
// duplicate exception
// do whatever you want here, for instance send error to client
}
}
}

然后你可以在你的 Controller 中像这样使用它(或者甚至将它用作全局/类范围的过滤器):
import { MongoExceptionFilter } from '<path>/mongo-exception.filter';

@Get()
@UseFilters(MongoExceptionFilter)
async findAll(): Promise<User[]> {
return this.userService.findAll();
}

(在 findAll() 调用中,重复异常在这里没有意义,但您明白了)。

此外,我强烈建议使用类验证器,如下所述: https://docs.nestjs.com/pipes

关于typescript - 如何使用 nestjs 处理 Mongoose 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50864001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com