【问题标题】:NestJS: Controller function with @UploadedFile or String as a parameterNestJS:以@UploadedFile 或String 作为参数的控制器函数
【发布时间】:2020-01-06 13:34:28
【问题描述】:

我正在使用 NestJS(版本 6.5,带有 Express 平台),我需要处理一个属性可以是文件或字符串的请求。

这是我目前拥有的代码,但我没有找到一种干净的方法来实现它。

MyAwesomeController

@Post()
@UseInterceptors(FileInterceptor('source'))
async handle(@UploadedFile() source, @Body() myDto: MyDto): Promise<any> {
  //do things...
}

我是否遗漏了一些明显的东西,或者我应该编写自己的拦截器来处理这种情况? 设计方面,这很糟糕吗?

【问题讨论】:

    标签: node.js api-design nestjs


    【解决方案1】:

    基于您正在设计 REST API

    这取决于您想要实现什么用例:您的客户端流程是否设计为分两步执行?
    stringfile 参数可以同时传递,还是每次调用都只有一个? (例如,如果您想更新 file 及其 name,或其他一些与 Multer 无关的属性)。
    当您将字符串作为参数传递给端点调用时,file 资源是否已创建/更新/删除?或者可能根本没有?

    根据您想到的答案和流程,您应该在两个独立的端点中拆分两个案例处理,或者同时处理两个参数可能是有意义的。

    • 如果一次只能传递一个参数,我会说去两个独立的端点;您将从维护和代码可读性中受益。

    • 如果可以同时传递两个参数并且它们与同一个资源相关,那么一次处理它们可能是有意义的。

    希望这会有所帮助,不要犹豫发表评论;)

    【讨论】:

    • 感谢您的回答 :) 我的“源”参数是任何格式的文本(filestring),我将其转换为 Buffer后处理。一次只能传递一个文本对象以及一些选项(我的问题中的myDto)。由于每种情况的逻辑完全相同,我无法想象选择两个不同端点的充分理由。
    • 好吧,那么我会选择一个可以处理stringfile 传入类型的自定义拦截器。如果其他人有更好/更优雅的方式来实现这一点,我建议他们添加他们的答案:)
    猜你喜欢
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2017-04-08
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多