如何使用 nestfastify 编写来自 nestjs 异常过滤器的响应
How to write the response from nestjs exception filters using nestfastify
我在编写来自 nestjs 异常过滤器的自定义 HTTP 响应时遇到问题
我用的是 nest fastify one(不是 express)
我正在创建捕获 UserNotFoundException 的自定义异常过滤器,如下所示:
@Catch(UserNotFoundException)
export class UserNotFoundExceptionFilter implements ExceptionFilter {
catch(exception: UserNotFoundException, host: ArgumentsHost) {
const errorResponse = new ErrorResponse<string[]>();
const response = host.switchToHttp().getResponse();
errorResponse.message = 'unauthorized exception'
errorResponse.errors = [
'invalid username or pass'
];
response.status(401).json(errorResponse)
}
}
我不断得到 response.status(...).json() 不是函数。
[Nest] 5400 - 05/17/2020, 00:27:26 [ExceptionsHandler] response.status(...).json is not a function +82263ms
TypeError: response.status(...).json is not a function
我知道我必须指定
对某种类型的回复作者的回复类型(例如:来自快递的回复)。
我尝试从 express 导入 Response 对象,并将 response 变量的类型更新为 Response(express) ,如下所示:
import {Response} from 'express';
const response = host.switchToHttp().getResponse<Response>();
一切顺利运行。
但我不想在我的应用程序中添加一些表达的东西,我只想使用 nestjs fastify。
你们知道有什么 class 可以从 express 中替换这个 Response 对象吗?
或者,如果你有另一种更聪明的方法来解决这个问题,它也会有所帮助
谢谢大家
如果您使用 Fastify
,则需要使用 fastify
和 http
包中的 FastifyReply<ServerResponse>
类型。 Fastify 本身在回复对象上没有 json
方法,但它确实有一个 .send()
方法,如果给它一个对象,它将 JSON.stringify()
一个对象。
虽然如果您使用 express
中的 Response
对象,项目可能 构建 ,但您可能会收到关于 response.status().json is not a function
.以下应该可以正常工作
import { FastifyReply } from 'fastify';
@Catch(UserNotFoundException)
export class UserNotFoundExceptionFilter implements ExceptionFilter {
catch(exception: UserNotFoundException, host: ArgumentsHost) {
const errorResponse = new ErrorResponse<string[]>();
const response = host.switchToHttp().getResponse<FastifyReply<ServerResponse>>();
errorResponse.message = 'unauthorized exception'
errorResponse.errors = [
'invalid username or pass'
];
response.status(401).send(errorResponse)
}
}
总的来说,Nest 是 Express 和 Fastify 的包装器,并且在谈论库特定选项(如请求和响应)时,大多数文档都与 Express 相关。当涉及库特定方法时,您应该参考 Fastify's documentation。
我在编写来自 nestjs 异常过滤器的自定义 HTTP 响应时遇到问题
我用的是 nest fastify one(不是 express)
我正在创建捕获 UserNotFoundException 的自定义异常过滤器,如下所示:
@Catch(UserNotFoundException)
export class UserNotFoundExceptionFilter implements ExceptionFilter {
catch(exception: UserNotFoundException, host: ArgumentsHost) {
const errorResponse = new ErrorResponse<string[]>();
const response = host.switchToHttp().getResponse();
errorResponse.message = 'unauthorized exception'
errorResponse.errors = [
'invalid username or pass'
];
response.status(401).json(errorResponse)
}
}
我不断得到 response.status(...).json() 不是函数。
[Nest] 5400 - 05/17/2020, 00:27:26 [ExceptionsHandler] response.status(...).json is not a function +82263ms
TypeError: response.status(...).json is not a function
我知道我必须指定 对某种类型的回复作者的回复类型(例如:来自快递的回复)。
我尝试从 express 导入 Response 对象,并将 response 变量的类型更新为 Response(express) ,如下所示:
import {Response} from 'express';
const response = host.switchToHttp().getResponse<Response>();
一切顺利运行。
但我不想在我的应用程序中添加一些表达的东西,我只想使用 nestjs fastify。 你们知道有什么 class 可以从 express 中替换这个 Response 对象吗? 或者,如果你有另一种更聪明的方法来解决这个问题,它也会有所帮助
谢谢大家
如果您使用 Fastify
,则需要使用 fastify
和 http
包中的 FastifyReply<ServerResponse>
类型。 Fastify 本身在回复对象上没有 json
方法,但它确实有一个 .send()
方法,如果给它一个对象,它将 JSON.stringify()
一个对象。
虽然如果您使用 express
中的 Response
对象,项目可能 构建 ,但您可能会收到关于 response.status().json is not a function
.以下应该可以正常工作
import { FastifyReply } from 'fastify';
@Catch(UserNotFoundException)
export class UserNotFoundExceptionFilter implements ExceptionFilter {
catch(exception: UserNotFoundException, host: ArgumentsHost) {
const errorResponse = new ErrorResponse<string[]>();
const response = host.switchToHttp().getResponse<FastifyReply<ServerResponse>>();
errorResponse.message = 'unauthorized exception'
errorResponse.errors = [
'invalid username or pass'
];
response.status(401).send(errorResponse)
}
}
总的来说,Nest 是 Express 和 Fastify 的包装器,并且在谈论库特定选项(如请求和响应)时,大多数文档都与 Express 相关。当涉及库特定方法时,您应该参考 Fastify's documentation。