gpt4 book ai didi

javascript - 如何在 NestJS 过滤器中使用 @Catch() 接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:17 25 4
gpt4 key购买 nike

我正在开发一个使用 Firebase 进行身份验证的 NestJS 后端。我只想捕获来自 Firebase 的所有异常(例如,当用户使用过期 token 时)并将它们转换为实际的 HTTP 错误。我希望 HttpExceptions 由默认过滤器处理。

我尝试创建一个新的过滤器,但是当我尝试将装饰器设置为@Catch(FirebaseError) 它不会编译说 'FirebaseError' 仅指一个类型,但在这里用作值。我还尝试让 @Catch() 不带参数,并在 catch 函数中指定 FirebaseError 类型,但它捕获了每个异常。

// This code doesn't work
import { FirebaseError } from 'firebase';
import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';

@Catch(FirebaseError)
export class FirebaseExceptionFilter implements ExceptionFilter<FirebaseError> {
catch(exception: FirebaseError, host: ArgumentsHost) {
// handle the exception
}
}

我希望为 FirebaseError 异常调用此过滤器,但是如果我编写 @Catch(FirebaseError) 它不会编译,如果我编写 @ Catch() 它捕获每个异常。

最佳答案

看看 source code ExceptionFilter 的:

ExceptionMetatype => exception instanceof ExceptionMetatype,

instanceof 检查不适用于接口(interface),仅适用于类。 (它需要运行时的原型(prototype)信息。)


您可以使用 Interceptor 将错误转换为 HttpExceptions。参见 this answer . (当然,这里也不能在接口(interface)上使用instanceof。)

关于javascript - 如何在 NestJS 过滤器中使用 @Catch() 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55316452/

25 4 0
文章推荐: angular - 如何在 Angular 6+ CLI 中使用 Handlebars.js?
文章推荐: sql - SQL 查询中的自定义组和平均值
文章推荐: angular - 如何在 Angular 项目中导入 rxjs 的 map 属性,错误 : Property 'map' does not exist on type 'Observable' ?