iT邦幫忙

0

請教一個Express.js搭配TypeScript的應用問題

  • 分享至 

  • xImage

如題,在看國外YT教學裡面使用TypeScript去定義request的body格式 程式碼如下:

type RequestBody = { text: string };

router.get('/test', (req: Request, res: Response) => {
  res.status(200).json({code: 200, message: "OK"});
})

router.post('/test', express.json(),(req: Request, res: Response) => {
  const body = req.body as RequestBody;
  console.log(body);
  res.status(200).json({code: 200, message: "OK", data: body.text});
})

在做測試時,發現我post請求body亂傳一堆東西比如

{ "text": "John",
  "age": 999,
  "price": 1000
}

他request也沒事,所以這樣定義是方便我們取用body的某些屬性這樣而已嗎?
如果今天我想要強制判斷post的格式不正確,就直接做錯誤處理回傳應該怎麼做才好呢?
還是說不能去規範client端post傳什麼,只能自己去判斷哪些欄位沒有照該欄位型別傳和少傳欄位,這樣去處裡錯誤呢?

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2022-03-29 21:59:50 檢舉
我可以推薦你改成python, 用fastapi完全符合你的要求之外還直接產生api的文件給你。
samuraigo iT邦新手 4 級 ‧ 2022-03-30 08:20:03 檢舉
之前有考慮過python,不過因為自己前端有用TypeScript,所以想説後端乾脆就直接Express.js,然後我mac的Python版本超亂XD,環境變數整個亂掉,也考慮到未來轉換公司,南部用Python的公司少得可憐....其實連Node.js後端都很少,只是至少還有。
froce iT邦大師 1 級 ‧ 2022-03-30 11:13:04 檢舉
我個人反而討厭前後端都用同一種語言。
之前看了一陣子開源專案發現我很容易搞混是前端處理還是後端。

unix like的建議裝pyenv去切換。
samuraigo iT邦新手 4 級 ‧ 2022-03-30 14:37:20 檢舉
嗯嗯!感謝大大的分享,我其實蠻喜歡Python的,之前用自己PC玩過,現在公司配的mac電腦在zsh和arm後pyenv設定有做調整,目前還沒時間搞它XD。回家有時間再用PC玩玩看FastAPI
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
HAO
iT邦研究生 1 級 ‧ 2022-03-30 09:38:11

你好,TypeScript 定義的 type 其實只是方便開發者知道型別是什麼,在編譯的過程中就會被拿掉了,真正的驗證還是需要另外處理的,以 Express 來說,可以看看 express-validator,我之前也有寫過相關的文章,如果有需要的話也可以參考看看,希望對你有幫助!

另外,比起 Express 我更推薦使用 NestJS,以架構面而言,我認為它在元件的定位上會比 Express 還要直覺,有興趣的話可以參考我的系列文呦。

samuraigo iT邦新手 4 級 ‧ 2022-03-30 14:43:38 檢舉

感謝大大分享,之前也很看好NestJS,因為他寫法很像Java的SpringBoot,而且規範很嚴謹,只是台灣在Express的名聲之下顯得使用的公司較少,目前公司要徵一個後端,我需要在他進來前先拼出一個後端的業務邏輯,可能要評估一下時間來學NestJS了><

我要發表回答

立即登入回答