記錄學習 nest.js 開發的過程
示範環境
Windows 10 、mysql v8.0.12、Redis3 v.2.100、node v14.16.1、npm v6.14.12、nestjs v8.1.1
連結
- node 下載下傳安裝位址 直接下載下傳穩定版
- nest.js 中文文檔位址 文檔參考
Nest CLI 安裝
建立項目
運作以下指令建立 nest 項目 nest-admin-server-template 為項目名
nest new nest-admin-server-template
Which package manager would you ❤️ to use?
此處我們選擇自己喜歡的包管理器就好了,本文選擇 yarn。
目錄結構
此時 src 生成以下檔案,
app.controller.ts | 帶有單個路由的基本控制器。 |
---|---|
app.controller.spec.ts | 針對控制器的單元測試 |
app.module.ts | 應用程式的根子產品 |
app.service.ts | 具有單一方法的基本服務(service)。 |
main.ts | 應用程式的入口檔案 |
運作
根目錄下運作以下指令用于本地開發調試,将 watch 檔案變化自動重新開機服務
yarn run start:dev
此時通路
http://localhost:3000/
可以看到 Hello World!
檔案用途
可以簡單的了解為
controller 負責路由,處理傳入的請求,并傳回相關響應
service 具體的業務處理
module 将各個子產品組織在一起
新增一個路由
app.controller.ts
import { Controller, Get, Post } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
// 一個get請求 路徑test
@Get('test')
testHello(): string {
return 'test hello';
}
//一個post 請求,路徑test
@Post('test')
testPost(): string {
return this.appService.getPost();
}
}
app.service.ts
import { Injectable } from "@nestjs/common";
@Injectable()
export class AppService {
getHello(): string {
return "Hello World!";
}
getPost(): string {
return "getPost!";
}
}
get 請求
http://localhost:3000/test
傳回 test hello
post 請求
http://localhost:3000/test
傳回 getPost!
以上我們可以看到 nest 部分路由的能力,其中控制器,Module 中 imports、controllers、providers 可以詳見官方文檔。
但我覺得,如果有一定的前端開發經驗,特别是 angular 開發經驗,畢竟 nest.js 的架構深受 Angular 的啟發,可以在實踐中逐漸了解,而不必拘泥在文檔。
nest 強烈推薦使用子產品作為組織元件的有效方式。是以,我們不可能所有的路由、業務邏輯等等都在根子產品下完成。
對于大多數應用程式而言将采用多個子產品,每個子產品封裝一組密切相關的功能。在後面我們将展現這一點。
建立檔案
使用 nest-cli 提供的指令可以快速建立檔案,文法如下:
nest g [檔案類型] [檔案名] [檔案目錄(src目錄下)]
# 常用指令 --no-spec不要測試用例檔案
nest g module/mo user logical --no-spec
nest g service/s user logical
nest g controller/co user logical
為了簡單示範,測試用例暫不在考慮範圍内,是以不會生成測試檔案
下一篇,為了友善多人協作,以及資料庫配置等,我們将進行多環境的常量配置