【问题标题】:How to make URI versioning optional in a nestjs REST application如何在 Nestjs REST 应用程序中使 URI 版本控制成为可选
【发布时间】:2022-01-17 20:21:42
【问题描述】:

遵循文档here 可以轻松启用 HTTP REST 应用程序的 NestJS URI 版本控制。

但是文档没有解释如何使 URI 版本控制成为可选。

示例:

/api/v1/users

/api/v2/users

/api/users -> 应该映射到 v1 以允许现有的 webhook 继续工作

问题:

我们如何在 NestJS REST 应用程序中使 URI 版本控制成为可选,以便旧版本(没有任何 api 版本)继续工作?

【问题讨论】:

    标签: nestjs nestjs-swagger


    【解决方案1】:

    您应该在defaultVersion 选项上使用VERSION_NEUTRAL 版本,例如:

    app.enableVersioning({
        type: VersioningType.URI,
        defaultVersion: [VERSION_NEUTRAL, '1', '2'],
    });
    

    https://docs.nestjs.com/techniques/versioning

    【讨论】:

    • 啊,好吧,我在文档中完全错过了这个,谢谢。
    • 我没有在文档网站上添加这个,因为defaultVersion 的类型定义应该告诉你可以实现顺便说一句
    • 有没有办法检查版本控制是否启用? @MicaelLevi
    • @Raj 我想唯一的方法是查看日志。你会看到(version: x)
    • @MicaelLevi 我的意思是我必须在代码中检查这个。我必须在启用版本的基础上处理一个场景。
    【解决方案2】:

    更新:

    以下是一个 hack,导致 URI 版本控制的全局前缀不再起作用,请使用接受的答案。

    原答案:

    要使版本控制成为可选,请将版本控制前缀设置为空字符串(默认为v)并明确设置包含前缀的版本控制字符串。

    main.ts:

    app.enableVersioning({
        type: VersioningType.URI,
        defaultVersion: ['', 'v1', 'v2'],
        prefix: '',
    });
    

    在 v1 控制器中:

    @Controller({ path: 'users', version: ['v1', ''] })

    【讨论】:

    • 这是老套路
    • @MicaelLevi 好的,如果有更好的方法,你能再补充一个答案吗?
    猜你喜欢
    • 2019-10-24
    • 2012-03-01
    • 2016-11-01
    • 1970-01-01
    • 2014-03-25
    • 2021-08-24
    • 2014-10-26
    • 2020-05-15
    相关资源
    最近更新 更多