typescript - NestJS 将 DTO 传递给扩展控制器并使用 ValidationPipe 进行验证
问题描述
在我的NestJS
项目中,我有一个由我的应用程序的所有其他控制器扩展的泛型BaseController
。现在我正在尝试验证 POST 方法的 DTO。我尝试过(1)将控制器的 dto 作为类型传递abstractController
,(2)也作为options
对象中的参数传递,但没有成功。在第一种情况下,验证被跳过,在第二种情况下,我收到了 TypeScript 错误。
将 DTO 传递给扩展控制器并使用 with 的正确方法是什么ValidationPipe
?我希望我的所有控制器都能够将其特定的 DTO 传递给abstractController
// base.controller.ts
export function abstractController<T, createDto>(options): any {
const resource = options.resource;
const dto = options.dto;
abstract class BaseController {
protected readonly baseService: BaseService<T>;
protected constructor(baseService: BaseService<T>) {
this.baseService = baseService;
}
// 1st using createDto passed on abstractController type
@Post()
public async create(
@Body(ValidationPipe) createDto: createDto, // Validation is skipped
): Promise<T> {
return this.baseService.create(createDto);
}
// 2nd using dto passed in options
@Post()
public async create(
@Body(ValidationPipe) createDto: dto, // Error: 'dto' refers to a value, but is being used as a type here. Did you mean 'typeof dto'
): Promise<T> {
return this.baseService.create(createDto);
}
}
return BaseController
}
// cat.controller.ts
const BaseController = abstractController<Cat, CreateCatDto>({
resource: 'cat',
dto: CreateCatDto
});
@Controller('cat')
export class CatController extends BaseController {
constructor(private readonly catService: CatService) {
super(catService);
}
}
提前致谢
解决方案
推荐阅读
- amazon-web-services - 如何设置 Lambda/Step Functions,以便在空闲 API 响应时不向我收费?
- sql - 有没有办法将 BigQuery 交互式 shell 结果保存到文件中?
- javascript - Google Scripts - 在另一个函数中调用函数时出错
- android - 我的应用程序在收到提供 E/AndroidRuntime 的 Firebase 通知时崩溃:致命异常:Firebase-FirebaseMessagingService 错误
- search - 在 SuiteScript 搜索中获取自定义列表非活动字段
- python - 有没有办法解决 pytesseract 和 python 的权限被拒绝错误?
- php - 使用 PHP 连接 Microsoft SQL Server 2014
- vb.net - Dotnetbar - 滑动面板的起始位置,滑入滑出
- assembly - 比较字符串而不在汇编中使用jmp?
- webassembly - 在我的 AssemblyScript 模块和我的 JS 之间共享内存的正确方法是什么?