有一个端点,您需要在其中验证参数。比方说:
@Get('/:id')
getFriend(@Param('id', new ParseIntPipe()) userId) {
return `Get friend: ${userId}`;
}
这里我指出有必要检查这是一个数字。
import {PipeTransform, Injectable, ArgumentMetadata, BadRequestException} from '@nestjs/common';
@Injectable()
export class ParseIntPipe implements PipeTransform<string, number> {
transform(value: string, metadata: ArgumentMetadata): number {
const val = parseInt(value, 10);
if (isNaN(val)) {
// как-то нужно прокинуть параметр local и локализовать ошибку
throw new BadRequestException('Validation failed');
}
return val;
}
}
但是local
客户端也可以传入参数,在此基础上生成数据。例如,错误是本地化的。如果有的话,如何将这个参数传递给管道?
管道不是为此而设计的,我看不到将语言环境放入其中的好方法。在我看来,最好的解决方案是按原样从管道中抛出异常,并将它们本地转换为拦截器
事实上,语言环境仅用于错误的本地化。因此,可以使用异常过滤器。在大多数情况下,我们会抛出自定义错误,因此我编写了以下过滤器:
好吧,在主模块中我们连接它: