iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

從零開始的後端異世界生活系列 第 10

Day 10 - 使用 Router 控制 NestJS API 版本

  • 分享至 

  • xImage
  •  

花東出遊中 Orz..

刪掉初始 Controller 與 Service

在初始創建專案時,NestJS 送給了我們以下的內容:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619Evp8hQU5Nj.png

其中,初始的「Controller、Controller 測試、及 Service」都是我們用不到的東西,我們可以先把它給刪掉,留下「app.module.ts 及 main.ts」即可。

但還需要進到 app.module.ts 中,將 controllers 及 providers 參數給刪除:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619dUCJAiS8rT.png

然後我們運行看看,看起來沒有報錯呢:
https://ithelp.ithome.com.tw/upload/images/20200923/201196199C7ikMpwiZ.png

引入 Nest Router

Nest Router 文件在此:https://www.npmjs.com/package/nest-router

打開來後找到安裝的 CLI 並安裝:

yarn add nest-router

設定 Nest Router

安裝成功後,我們首先會到 app.module.ts 來設定一些相關內容。

首先設定 Router 的路徑,我們先假設我們要拆分成 v1 跟 v2 兩個版本:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619k2uvMxA7fW.png

並在 imports 的地方引入 RouterModule 並設定:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619ungplWEFJF.png

製作兩個版本 API Module

我們先將兩個版本 API 範例的 Module 給弄好,先使用 CLI 分別新增 Apiv1Module 及 Apiv2Module:

nest g module apiv1
nest g module apiv2

https://ithelp.ithome.com.tw/upload/images/20200925/20119619zlPMoc6vxf.png

此時 app.module 中會自動 import 剛剛新增的兩個 module:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619dCgh1SNJyf.png

製作兩個版本 API Controller

先假設我們要做兩種版本的 API 接口是 TasksController 中的某隻 API,先分別在兩個版本中的 Module 新增一樣的 Controller:

nest g controller apiv1/tasks
nest g controller apiv2/tasks

https://ithelp.ithome.com.tw/upload/images/20200925/20119619yk7OH28nQw.png

此時你剛各新增的 Controller 也會被自動放到各自的 apiModule 中(如果你用 CLI 的話)

設置測試用兩個版本 API 範例

先來隨便寫寫個範例,假設是個 Get 然後隨便 Return 一個字串。

這是 apiv1 Controller 的接口:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619mTixFFfzxJ.png

然後再去 apiv2 Controller 的接口寫:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619vFev22r03M.png

接著試著運行我們的 Server 吧,看起來沒什麼問題:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619yaHLs7jHA8.png

打開 Postman 來測試看看

剛剛我們的兩個 API 接口是 http://localhost:3000/tasks ,但此時這一串會沒有效果。

改成打 http://localhost:3000/v1/tasks 看看:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619PYZpoevvwG.png

看來有得到想要的回應呢,改打 http://localhost:3000/v2/tasks 看看:
https://ithelp.ithome.com.tw/upload/images/20200925/20119619by0ZUWUwyz.png

v2 這邊也得到了自己設定的 Return,看來這樣設定完成了呢。

/*
本系列文係個人新手開發心得,可能會有許多錯誤,煩請多多包容不吝指教。
*/


上一篇
Day 09 - NestJS 中的 Module 基礎篇
下一篇
Day 11 - 懶得寫文件拉~來使用 NestJS 的 Swagger UI 幫你寫(上)
系列文
從零開始的後端異世界生活30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言