NestJS:以@UploadedFile 或 String 作为参数的控制器函数
NestJS: Controller function with @UploadedFile or String as a parameter
我正在使用 NestJS(6.5 版,带有 Express 平台),我需要处理带有 属性 的请求,它可以是文件或字符串。
这是我目前拥有的代码,但我没有找到一种干净的方法来实现它。
MyAwesomeController
@Post()
@UseInterceptors(FileInterceptor('source'))
async handle(@UploadedFile() source, @Body() myDto: MyDto): Promise<any> {
//do things...
}
我是不是遗漏了一些明显的东西,还是我应该编写自己的拦截器来处理这种情况?
设计方面,这很糟糕吗?
基于您设计 REST API:
这取决于您想要实现的用例:您的客户端流程是否设计为分两步执行?
string
和 file
参数可以同时传递,还是每次调用时只有两者之一? (例如,如果您想更新 file
及其 name
,或其他一些与 Multer 无关的属性)。
当您将字符串作为参数传递给端点调用时,是否 file
资源 创建/更新/删除 ?或者也许根本没有?
根据您想到的答案和流程,您应该将两种情况的处理拆分到两个独立的端点内,或者同时处理两个参数可能更有意义。
如果一次只能传递一个参数,我会说去两个独立的端点;您将从维护和代码可读性中受益。
如果两个参数可以同时传递并且它们与同一个资源相关,那么同时处理它们可能是有意义的。
希望这对您有所帮助,请不要犹豫发表评论 ;)
我正在使用 NestJS(6.5 版,带有 Express 平台),我需要处理带有 属性 的请求,它可以是文件或字符串。
这是我目前拥有的代码,但我没有找到一种干净的方法来实现它。
MyAwesomeController
@Post()
@UseInterceptors(FileInterceptor('source'))
async handle(@UploadedFile() source, @Body() myDto: MyDto): Promise<any> {
//do things...
}
我是不是遗漏了一些明显的东西,还是我应该编写自己的拦截器来处理这种情况? 设计方面,这很糟糕吗?
基于您设计 REST API:
这取决于您想要实现的用例:您的客户端流程是否设计为分两步执行?
string
和 file
参数可以同时传递,还是每次调用时只有两者之一? (例如,如果您想更新 file
及其 name
,或其他一些与 Multer 无关的属性)。
当您将字符串作为参数传递给端点调用时,是否 file
资源 创建/更新/删除 ?或者也许根本没有?
根据您想到的答案和流程,您应该将两种情况的处理拆分到两个独立的端点内,或者同时处理两个参数可能更有意义。
如果一次只能传递一个参数,我会说去两个独立的端点;您将从维护和代码可读性中受益。
如果两个参数可以同时传递并且它们与同一个资源相关,那么同时处理它们可能是有意义的。
希望这对您有所帮助,请不要犹豫发表评论 ;)