我尝试编写一个自定义验证管道来验证一个带有多个参数的请求。我想用自定义管道验证一个参数,但另一个参数也需要在验证中使用,我没有找到文档中描述的方法。
例如,这是我的API,它需要一个chainId
和一个address
作为输入参数。我需要验证地址是否有效,但没有chainId
我无法做到这一点。
下面是我的代码,我写的管道后面是关于自定义管道的文档例子:
控制器
@Put('/:chainId/tokens/:address')
@ApiOperation({
summary: 'Create a token',
})
async create(
@Param('chainId') chainId: number,
@Param('address', new AddressValidationPipe()) address: string,
): Promise<Token> {
return await this.tokensService.save(chainId, address);
}
验证管
@Injectable()
export class AddressValidationPipe implements PipeTransform {
async transform(address: string) {
// chainId should be another param, but I don't know how to get it in this pipe
const chainId = 4;
if (!validator(chainId, address)) {
throw new BadRequestException(
'Address is not valid, or it is not on this chain',
);
}
return address;
}
}
1条答案
按热度按时间vlurs2pr1#
经过一些研究,我发现我可以一次将这两个参数放入这个管道,并且只验证地址。
验证管道
尽管如此,我必须自己将
chainId
转换为数字,并且我需要告诉Swagger我使用的参数,因为我没有将它们作为控制器中的每个参数编写。控制器