最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NestJS實現(xiàn)接口的多版本管理

 更新時間:2024年06月13日 08:42:44   作者:云牧  
在軟件開發(fā)中,隨著應用的迭代更新,經(jīng)常需要引入新的接口版本同時保留舊版本以保證向后兼容,本教程將通過 NestJS 框架演示如何實現(xiàn)接口的多版本管理,感興趣的小伙伴跟著小編一起來看看吧

創(chuàng)建和運行項目

首先,我們需要創(chuàng)建一個新的 NestJS 項目,并啟動服務:

nest new version-test -p pnpm
cd version-test
nest g resource TestVersion --no-spec
pnpm start:dev

啟用接口版本控制

在 main.ts 文件中,引入版本控制功能,并設置版本信息通過 HTTP 頭部傳遞:

import { VersioningType } from '@nestjs/common';
import { AppModule } from './app.module';
import { NestFactory } from '@nestjs/core';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.enableVersioning({
    type: VersioningType.HEADER,
    header: 'version', // 指定傳遞版本信息的 HTTP 頭部字段名為 'version'
  });

  await app.listen(3000);
}

bootstrap();

配置版本控制

在控制器中,我們可以通過 @Version 裝飾器指定接口版本。

例如,將默認接口設置為版本 1,并為新版本創(chuàng)建專門的接口:

import { Controller, Get, Version } from '@nestjs/common';
import { TestVersionService } from './test-version.service';

@Controller('test-version')
export class TestVersionController {
  constructor(private readonly testVersionService: TestVersionService) {}

  @Get()
  @Version('1')
  findAllV1() {
    return this.testVersionService.findAll();
  }

  @Get()
  @Version('2')
  findAllV2() {
    return this.testVersionService.findAll() + '版本2';
  }
}

帶上不同的請求頭,獲得的結果不一樣。

版本中立的接口

如果希望某些接口無論什么版本號如何都能訪問,可以使用 VERSION_NEUTRAL 常量:

import { VERSION_NEUTRAL, Controller, Get } from '@nestjs/common';

@Controller({
  path: 'test-version',
  version: VERSION_NEUTRAL
})
export class NeutralAaaController {
  // 接口實現(xiàn)
}

其他版本控制方式

NestJS 還支持通過媒體類型(Media Type)或 URI 路徑來控制版本:

Media Type

版本信息通過 Accept 頭部傳遞:

app.enableVersioning({
    type: VersioningType.MEDIA_TYPE,
    key: 'vvv='
})

如果客戶端希望請求版本 1 的 API,它需要在 HTTP 請求的 Accept 頭部中加入如下內(nèi)容:

Accept: application/json;vvv=1

URI 版本控制

版本信息直接在 URL 路徑中指定:

app.enableVersioning({
  type: VersioningType.URI,
});

在這個設置下,如果客戶端需要訪問版本 1 的 API,URL 應該像這樣:

http://localhost:3000/v1/users

對于版本 2,URL 應該是:

http://localhost:3000/v2/users

這種方式使得版本控制非常明顯,客戶端一看 URL 就能明白所請求的 API 版本。但可能會導致 URL 空間的膨脹。
注意這種方式不支持 VERSION_NEUTRAL,需要明確版本號:

@Controller({
  path: 'test-version',
  version: ["2", "3"]
})

自定義版本控制邏輯

如果內(nèi)置的版本控制方式不滿足需求,可以實現(xiàn)自定義版本控制邏輯:

import { VersioningType, NestFactory } from '@nestjs/common';
import { AppModule } from './app.module';
import { Request } from 'express';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const extractor = (request: Request) => {
    if (request.headers['disable-custom']) {
      return '';
    }
    return request.url.includes('yun') ? '2' : '1';
  };
  app.enableVersioning({
    type: VersioningType.CUSTOM,
    extractor
  });
  await app.listen(3000);
}

bootstrap();

以上就是NestJS實現(xiàn)接口的多版本管理的詳細內(nèi)容,更多關于NestJS接口管理的資料請關注腳本之家其它相關文章!

相關文章

  • Node.js 文件夾目錄結構創(chuàng)建實例代碼

    Node.js 文件夾目錄結構創(chuàng)建實例代碼

    下面小編就為大家?guī)硪黄狽ode.js 文件夾目錄結構創(chuàng)建實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • nodejs代碼執(zhí)行繞過的一些技巧匯總

    nodejs代碼執(zhí)行繞過的一些技巧匯總

    這篇文章主要給大家介紹了關于nodejs代碼執(zhí)行繞過的一些技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 一文教會你從Windows中完全刪除node.js

    一文教會你從Windows中完全刪除node.js

    作為新手nodejs卸載后安裝就總出錯,下面這篇文章主要給大家介紹了關于如何從Windows中完全刪除node.js的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Nodejs中Express框架的基本使用舉例

    Nodejs中Express框架的基本使用舉例

    Express是基于Node.js平臺的極簡、靈活的Web應用開發(fā)框架,它為 Node.js提供了一套強大的功能,用于創(chuàng)建Web應用程序和 HTTP 服務器,下面我們將介紹Nodejs中Express框架的基本使用,感興趣的朋友一起看看吧
    2025-09-09
  • nodejs爬蟲抓取數(shù)據(jù)亂碼問題總結

    nodejs爬蟲抓取數(shù)據(jù)亂碼問題總結

    這篇文章主要給大家總結了下nodejs爬蟲抓取數(shù)據(jù)亂碼問題的相關資料,需要的朋友可以參考下
    2015-07-07
  • nodejs中使用HTTP分塊響應和定時器示例代碼

    nodejs中使用HTTP分塊響應和定時器示例代碼

    本文通過示例將要創(chuàng)建一個輸出純文本的HTTP服務器,輸出的純文本每隔一秒會新增100個用換行符分隔的時間戳。實例代碼非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-03-03
  • Public?Npm?Registry模塊使用方式實例

    Public?Npm?Registry模塊使用方式實例

    這篇文章主要為大家介紹了Public?Npm?Registry的使用方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Node.JS用純JavaScript生成圖片或滑塊式驗證碼功能

    Node.JS用純JavaScript生成圖片或滑塊式驗證碼功能

    有一些Node.JS圖片生成類庫,比如node-captcha等的類庫,需要c/c++程序生成圖片??缙脚_部署不是很方便。這里介紹幾個用純JS實現(xiàn)的圖片驗證碼生成模塊,需要的朋友可以參考下
    2019-09-09
  • 基于node.js依賴express解析post請求四種數(shù)據(jù)格式

    基于node.js依賴express解析post請求四種數(shù)據(jù)格式

    本篇文章主要介紹了node.js依賴express解析post請求四種數(shù)據(jù)格式,主要是www-form-urlencoded,form-data,application/json,text/xml,有興趣的可以了解一下。
    2017-02-02
  • node實現(xiàn)shell命令管理工具及commander.js學習

    node實現(xiàn)shell命令管理工具及commander.js學習

    這篇文章主要為大家介紹了node實現(xiàn)shell命令管理工具及commander.js學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論

乌拉特中旗| 福鼎市| 崇左市| 开平市| 洪湖市| 福海县| 铁力市| 资中县| 邹城市| 永仁县| 桃园市| 安丘市| 城口县| 班戈县| 大港区| 廊坊市| 敖汉旗| 康保县| 碌曲县| 高尔夫| 双辽市| 论坛| 昭通市| 贵南县| 株洲县| 兰考县| 武强县| 凯里市| 泰兴市| 襄垣县| 广饶县| 定结县| 乌审旗| 隆昌县| 和政县| 徐闻县| 永平县| 惠来县| 沧源| 大理市| 台南县|