iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 1
2
Modern Web

Nest.js framework 30天初探系列 第 1

Nestjs framework 30天初探:Day01 攻略行前說明

筆者廢話時間

NodeJS 後端框架眾多,唯獨Nestjs 這框架最吸引我,雖然今年三月底出爐,還算蠻新的框架,網路上資源不多,但我相信日後它會有一席之地,因為我在努力推廣XDDDD,阿不是,是因為它架構嚴謹,能寫出高品質的程式。

前言

JavaScript是弱型別語言,型態轉換很自由,型態檢查也沒那麼嚴謹,這可搞死很多工程師,近幾年雖然有ES6、ES7、ES8的出現(ES9正在擬稿),可以幫助工程師提高程式品質,但跟強型別語言還是有些差距,於是出現了TypeScript,可以用TypeScript寫出強型別風格的程式碼,再透過Babel轉換成指定版本的JavaScript(ECMAScript版本)。

Nestjs的官網建議使用TypeScript,後續的示範都會以TypeScript去撰寫,如果要寫一般JavaScript也是可行的,不過官網有提到,有些Nestjs的API無法用JavaScript去呼叫使用,所以使用TypeScript作為開發語言會比較好。

Nestjs Framework幾個特點:

  1. Base On Express 框架和socket.io套件。
  2. 語法風格類似Angular,也有人覺得類似Java Spring,使用了許多裝飾器語法。
  3. 依賴注入(Dependency Injection)Nestjs大量使用依賴注入,建議使用此作法。
  4. Exception layer,可以做更多的exception處理。
  5. Guards作為路由警衛,處理訪問權限。
  6. Interceptors攔截器機制。
  7. Unit Test & E2E Test

基於上述幾個特點,Nestjs做了很多抽象層,程式如果是用Nestjs開發,會較接近低藕合架構,甚至開發速度也會有大幅提升;另一方面,Nestjs的底層是Express框架,在使用Nestjs開發時,也可以呼叫Express的API,而且Express作為最多人使用的NodeJS後端框架,是有潛力吸收廣大使用Express開發的工程師,建立龐大活躍的社群。

筆者30天規劃

歡迎大家討論指教

筆者文筆拙劣,程式功力薄弱,說明解釋不佳或程式有問題之地方,請不吝指教。

準備環境(筆者環境)

  • 建議使用Visual Studio Code作為開發工具
  • NodeJS version:8.9.1
  • npm version:5.5.1

Nestjs專案準備步驟

  1. cmd下指令。
git clone https://github.com/nestjs/typescript-starter.git project
  1. cmd下指令,切換到安裝資料夾,並安裝相關模組。
cd project & npm install

專案架構圖
https://ithelp.ithome.com.tw/upload/images/20171205/20107195lNVRyn7KDH.png
5. cmd下指令,啟動Server,如有看到下圖即大功告成,預設listen 3000 port。

npm start

console結果

[Nest] 12780   - 2017-12-5 20:37:50   [NestFactory] Starting Nest application...
[Nest] 12780   - 2017-12-5 20:37:50   [InstanceLoader] ApplicationModule dependencies initialized +8ms
[Nest] 12780   - 2017-12-5 20:37:51   [RoutesResolver] AppController {/}: +40ms
[Nest] 12780   - 2017-12-5 20:37:51   [RouterExplorer] Mapped {/, GET} route +4ms
[Nest] 12780   - 2017-12-5 20:37:51   [NestApplication] Nest application successfully started +3ms
  1. 將server.ts的程式碼稍作變化,程式碼及說明如下圖:
import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './app/app.module';
import { INestApplication } from '@nestjs/common/interfaces/nest-application.interface';
import * as express from 'express';//使用express模組

//創建express 實例
const instance = express();
//NestFactory.create()接受一個模組引數,和一個可選的express實例引數,並返回Promise。
const app: Promise<INestApplication> = NestFactory.create(ApplicationModule, instance);

app
  //Promise傳入nest的實例引數。
  .then(nestInstance =>
    //nest實例具有listen方法,傳入port引數,和一個可選的callback function。
    nestInstance.listen(3000, () => {
      console.log('Application based on Express is listening on port 3000');
    })
  )
  .catch((err) => {
    console.error('Application configured to listen on port 3000 failed to start', err);
  });

  1. cmd下指令,如看到下圖,代表我們已經成功啟動一個base on Express的nest 程式。
npm start

console結果

[Nest] 11632   - 2017-12-5 20:45:21   [NestFactory] Starting Nest application...
[Nest] 11632   - 2017-12-5 20:45:21   [InstanceLoader] ApplicationModule dependencies initialized +8ms
[Nest] 11632   - 2017-12-5 20:45:21   [RoutesResolver] AppController {/}: +31ms
[Nest] 11632   - 2017-12-5 20:45:21   [RouterExplorer] Mapped {/, GET} route +5ms
[Nest] 11632   - 2017-12-5 20:45:21   [NestApplication] Nest application successfully started +2ms
Application based on Express is listening on port 3000

程式碼都在github


下一篇
Nestjs framework 30天初探:Day02 Controllers
系列文
Nest.js framework 30天初探30

2 則留言

0
逮丸逮丸
iT邦大師 1 級 ‧ 2017-12-05 16:13:30

所規畫的內容很有料也很有分量。
期待透過這個系列能幫助更多人對這新框架
能夠更快速的掌握!

0
Jonny Huang
iT邦新手 5 級 ‧ 2017-12-16 07:51:51

透過 Nest CLI 來建立專案也是不錯的選擇,透過指令建立相關檔案對於剛接觸的人來說入手難度應該會比較低。

Michael iT邦新手 5 級 ‧ 2017-12-16 10:50:55 檢舉

NestCLI是蠻好的工具,原先day01文章是用NestCLI起專案的,結果day02發現它掛掉了,索性修改文章拿掉NestCLI,同時也有發issue給NestCLI作者,現在應該是正常可以使用的,謝謝大大提出這點~

我要留言

立即登入留言