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));
我想创建某种类型的捕获所有端点,它将解释不同的请求类型: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));