Node.js 最常被應用的場景便是作為 web server,而這剛好符合 node 最適合的使用場景,為 IO intensive 的應用。
雖然 node 原生提供的 http module 可以完成 http server 的功能,但生態系中有許多 web framework,提供我們更高度抽象化的 API 來進行開發,可以讓我們擁有更高的產能及程式碼的可維護性,今天就簡單條列幾個生態系中的 framework,但不會對它們做過多的評比(因為這需要更大量的功課)。
Express 是存在很久的框架,在社群裡面也擁有最多的星星數,社群資源算是最豐富的。
它提供了更方便的介面讓我們可以去完成 API 的開發,並且用 callback function 來撰寫 middleware,但如過在 middleware 中傳 async function,例外錯誤不會被處理,是一個小問題。
Koa 為 express 團隊後來另外開發的框架,在設計初期變考慮了非同步的語法,利用 async/await 讓整個寫法更加優雅,本身也不綁定任何 middleware,效能上也略優於 express。然而生態系便稍微不如 express。
Fastify 號稱是 Node 生態系中最快的 web framework 之一,使用 hooks 重用邏輯。
無論是 Express 或是 Koa,Node 生態系原本比較少有完整規範的框架,他們提供了方便的 api,卻沒有規範如何去架構整個專案以及組織語法。
Nest 本身借鑑如 Rails, Laravel 這些完整規範的框架,基於 express/fastify 之上進行封裝,制定了一些開發的習慣跟規範,並且預設導入 Typescript,提供更完整的語法跟型別檢查。
目前生態系也是蓬勃發展中。
Expressjs, Koajs, fastifyjs 這三個屬於所謂的微框架(Microframeworks),其實就是提供了一套方便使用的 api 讓開發者進行開發,沒有其他約定跟規範。
Nestjs 屬於所謂的企業級框架,有著較完整的規範,且會要求模組之間的相依性及提供依賴注入等功能。
而 node 的框架一般在處理 IO intensive 的任務時,一般應該都能有不錯的表現,所以使用哪一個框架,感覺會比較取決於使用習慣,而當專案架構比較複雜時,則可以試試看 Nestjs 應該會是不錯的選擇。