NestJS:在 404 时命中默认端点(未找到端点)

NestJS: Hit default endpoint when 404 (endpoint not found)

我想创建某种类型的捕获所有端点,它将解释不同的请求类型:Get、Post、Options 等以及任何请求。类似于以下内容:

@CatchAll('*')
public notFound {
  return 'Endpoint not found';
}

NestJS 中有这样的东西吗?

默认情况下,如果您请求一个不存在的端点,NestJS 将 return 一个 404 响应,其有效负载类似于以下内容:

{
    "statusCode": 404,
    "message": "Cannot GET /your-endpoint",
    "error": "Not Found"
}

我不知道具体的用例,但如果您愿意,可以创建一个自定义异常过滤器来捕获所有内容(或您想要抛出的特定错误)。您可以通过实施 ExceptionFilter 创建自定义过滤器并将错误类型检查为 return 自定义负载

@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
  constructor(private readonly httpAdapterHost: HttpAdapterHost) {}

  catch(exception: unknown, host: ArgumentsHost): void {

    const ctx = host.switchToHttp();

    // check the httpStatus code and add custom logic if you want
    const httpStatus =
      exception instanceof HttpException
        ? exception.getStatus()
        : HttpStatus.INTERNAL_SERVER_ERROR;

    const responseBody = {
       // ... your custom response body
    };

    this.httpAdapterHost.httpAdapter.reply(ctx.getResponse(), responseBody, httpStatus);
  }
}

并在您的 main.ts 文件中启用全局异常过滤器

const http_adapter = app.get(HttpAdapterHost);
app.useGlobalFilters(new AllExceptionsFilter(http_adapter));