Nest學習系列
??一文帶你入門【NestJS】
??前言
流程圖
Controllers 控制器主要負責處理傳入請求,并向客戶端返回響應,控制器可以通過路由機制來控制接收那些請求,通常一個Controllers種會有多個匹配路由,不同的路由可以知情不同操作,我們可以通過裝飾器將類與所需要的元數據關聯,使得Nest能夠將路由映射到對應的控制器。
??注意:我們這里所說的路由并不是前端頁面上的路由,而是我們調用api接口的路由
🚩如何創建 controller
//通過nest-cli 腳手架命令處理
nest g controller [name]
🚩基礎概念
-
路由:
@Controller(‘news’)
裝飾器中的news 作為可選路徑前綴,利用這個我們可以對controller進行分組
@Get 為Http 請求方法裝飾器,代表我們的請求方法
@Get(‘/page’),在請求方法裝飾器種添加自定義路徑之后,結合Controller 中的可選路徑,會組合形成
/news/page
-
請求對象
-
通配符
@Get(‘abcd’)
'abcd’ 路由路徑將匹配 abcd、ab_cd、abecd 等。字符 ?、+、* 和 () 可以在路由路徑中使用,并且是它們對應的正則表達式的子集。連字符 (-) 和點 (.) 由基于字符串的路徑逐字解釋。 -
狀態碼
@HttpCode() 裝飾器來設置對應Http 狀態碼,默認 200
@Post()
@HttpCode(204)
create() {return 'This action adds a new news';
}
- 重定向
要將響應重定向到特定 URL,你可以使用 @Redirect()
@Get()
@Redirect('https://nest.nodejs.cn', 301)
- 獲取路由參數
@Query方式
http://localhost:3000/news/page?id=2222&keyword=%27sss%27
@Param方式
http://localhost:3000/news/page/5
- 異步性
Nest 支持 async await 與 RxJS 的觀察流模式,可以通過這兩種方式實現 異步
- 請求負載
@Body()
注意:在接受參數之前我們需要確定DTO架構,我們可以先用TS的接口或者類實現一個簡單的DTO
建議使用類實現,因為接口在TS轉換JS的過程會被刪除,在運行時候可能訪問不到
🚩實例代碼
news.controller.ts
import { Controller,Get,Post, Put,Delete,Redirect, Param,Query, Body } from '@nestjs/common';
import { Request,Response, query } from 'express';
import { Observable, of } from 'rxjs';
import { CreateNewsDto,UpdateNewsDto } from './create-news.dto'
@Controller('news')
export class NewsController {@Get('/page')// @Redirect('https://nest.nodejs.cn')getNewsPageList(@Query() query: string): string {console.log(query);return 'This is the news page111';}@Get('/detail/:id')getNewsById(@Param() params: string): string {console.log(params);return 'This is the news detail page';}// 異步 async @Get('/async')async getNewsList(): Promise<string> {setTimeout(() => {console.log('This is the async news list');}, 2000);return 'This is the async news list';}// 異步 Observable 模式@Get('/observable')getNewsListObservable(): Observable<any[]> {return of([]);}@Post('/create')createNews(@Body() createNewsDto: CreateNewsDto): string {console.log(createNewsDto,'添加參數');return 'This is the create news message';}@Put('/update/:id')updateNews(@Body() updateNewsDto: UpdateNewsDto): string {return 'This is the update news message';}@Delete('/delete/:id')deleteNews(): string {return 'This is the delete news message'; }}
create-news.dto
export class CreateNewsDto {title: string;tag: string;author: string;content: string;}export class UpdateNewsDto {id:number;title: string;tag: string;author: string;content: string;
}
🚩結語
這篇文章主要介紹了Nest的Controller 控制器,簡潔明了,實現了一個基礎的新聞模塊增刪改查的框架,后端增加對應的service 即可實現一套比較完整的業務邏輯。