gpt4 book ai didi

javascript - Nestjs 验证器构造函数参数错误

转载 作者:行者123 更新时间:2023-11-30 14:19:04 25 4
gpt4 key购买 nike

我正在尝试让嵌套验证器像“管道”文档 (https://docs.nestjs.com/pipes)“对象模式验证”部分中的示例一样工作。我正在尝试使用 Joi 的示例,除了将模式从 Controller 传递到验证服务之外,它可以正常工作。

import * as Joi from 'joi';
import { PipeTransform, Injectable, ArgumentMetadata, BadRequestException
} from '@nestjs/common';

@Injectable()
export class JoiValidationPipe implements PipeTransform {
constructor(private readonly schema) {}

transform(value: any, metadata: ArgumentMetadata) {
const { error } = Joi.validate(value, this.schema);
if (error) {
throw new BadRequestException('Validation failed');
}
return value;
}
}

编译器提示:

Nest can't resolve dependencies of the JoiValidationPipe (?). Please make sure that the argument at index [0] is available in the current context.

在 Controller 中

@Post()
@UsePipes(new JoiValidationPipe(createCatSchema))
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}

编译器提示一个参数预期为零。

这看起来像是一个声明问题,但我真的不知道。为什么这行不通,我应该如何将模式传递给服务?

最佳答案

正如您自己所说,JoiValidationPipe 必须在任何模块中声明为提供者。


我只能用这段代码重现错误(不传递模式):

@UsePipes(JoiValidationPipe)
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}

确保您的代码中没有任何地方。

这对我有用:

@UsePipes(new JoiValidationPipe(Joi.object().keys({ username: Joi.string().min(3) })))
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}

关于javascript - Nestjs 验证器构造函数参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53047866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com