Nest.js Controller路由和請(qǐng)求處理強(qiáng)大功能解析
Controller
Controller 它 主要是負(fù)責(zé) 特定路由請(qǐng)求處理并將響應(yīng)結(jié)果返回給客戶端。
每個(gè)控制器 它會(huì)有多個(gè)路由,不同路由對(duì)應(yīng)不同的業(yè)務(wù)請(qǐng)求處理。
在 Nest 中, 創(chuàng)建一個(gè) 控制器,應(yīng)該使用類 和 裝飾器 , 裝飾器會(huì)使類相關(guān)聯(lián)的數(shù)據(jù)的關(guān)聯(lián)起來(lái),將請(qǐng)求綁定到相應(yīng)的控制器。
可以使用Nest-cli 提供的指令 快速創(chuàng)建一個(gè) CURD
nest g resource [name]
路由
@Controller 是 Nest 的基本控制器,通過(guò)修飾器 @Controller 可以將路由分組,模塊化進(jìn)行路由的管理,并最大限度的減少了代碼重復(fù)性。
路由的 形成 :
控制器裝飾器前綴@Controller('user') +
請(qǐng)求方法裝飾器結(jié)合 @Get('getDeatil')
將形成路由映射user/getDeatail
如何進(jìn)行路由分組呢?
@Controller 接受一個(gè)參數(shù),這可參數(shù)可選,默認(rèn)如果不傳, 就是 /
@Controller(分組名)
import { Controller, Get, Param, Post } from '@nestjs/common'; import { UserService } from '../service/index'; const result: Object = { code: 200, data: { str: '微信公眾號(hào):前端自學(xué)社區(qū)', arrList: [1, 2, 3, 4], }, }; @Controller('user') export class UserController { // 使用依賴注入的方式注入一個(gè)類 constructor(private readonly userService: UserService) {} @Get('getUserInfo') // 定義http的請(qǐng)求方式為get請(qǐng)求 getUserInfo(): object { // 函數(shù)名可以隨便定義 return this.userService.getUserInfo(result); // 控制層調(diào)用服務(wù)層的getHello()方法 } }
通過(guò) 訪問(wèn) http://localhost:3000/user/getUserInfo 就可以訪問(wèn)到響應(yīng)數(shù)據(jù)。
@Controller 裝飾器 修飾 類,該類就擁有和裝飾器關(guān)聯(lián)的屬性和功能,傳遞了一個(gè)參數(shù) user , 說(shuō)明當(dāng)前路由分組名稱為 user , 當(dāng)前類下的所有基準(zhǔn)路由都是 /user/ 開頭了。
通過(guò) HTTP 請(qǐng)求方法裝飾器 修飾方法,它會(huì)方法告訴 Nest 為 HTTP 請(qǐng)求的特定端點(diǎn)創(chuàng)建處理程序。
栗子中,getUserInfo 方法被 @Get 所修飾,所以它是一個(gè) Get 請(qǐng)求。
請(qǐng)求參數(shù)裝飾器
通過(guò)對(duì)客戶端發(fā)起的請(qǐng)求參數(shù)做解析處理,Nest 提供的訪問(wèn)請(qǐng)求對(duì)象 默認(rèn)方式為 express .
@Get('getQueryUser:id') getQueryUser(@Param() params) { return this.userService.getQueryUser(params); }
Nest 為所有標(biāo)準(zhǔn) HTTP 方法提供裝飾器:
@Get(), ;@Post(), @Put(), @Delete(), @Patch(), @Options(), 和 @Head(). 此外, @All()定義處理所有這些的端點(diǎn)。
路由通配符
支持基于模式的路由。 例如,星號(hào)用作通配符,將匹配任何字符組合。
@Get('ab*cd') findAll() { return 'This route uses a wildcard'; }
'ab*cd'路由路徑將匹配 abcd, ab_cd, abecd, 等等
請(qǐng)求狀態(tài)碼
響應(yīng)狀態(tài)碼默認(rèn)為 200 , POST 為 201 , 我們可以通過(guò)添加 @HttpCode(...)處理程序級(jí)別的裝飾器。 指定請(qǐng)求 Code
@Post() @HttpCode(204) create() { return 'This action adds a new cat'; }
自定義響應(yīng)頭
可以通過(guò)使用 @Header()裝飾器或特定于庫(kù)的響應(yīng)對(duì)象(并調(diào)用 res.header()直接地)。
@Post() @Header('Cache-Control', 'none') create() { return 'This action adds a new cat'; }
重定向
響應(yīng)重定向到特定 URL,響應(yīng)重定向到特定 URL 來(lái)重定向,@Redirect()需要兩個(gè)參數(shù), url和 statusCode,兩者都是可選的。 默認(rèn)值為 statusCode是 302 ( Found) 如果省略。
@Get('docs') @Redirect('https://docs.nestjs.com', 302) getDocs(@Query('version') version) { if (version && version === '5') { return { url: 'https://docs.nestjs.com/v5/' }; }
路由參數(shù)
當(dāng)獲取某個(gè)文章或數(shù)據(jù)時(shí),需要?jiǎng)討B(tài)傳遞id,那么我們可以使用 Get 請(qǐng)求,或拼接動(dòng)態(tài) id 來(lái)獲取,在Nest 中,可以使用 @Param()裝飾器,
它用于修飾方法參數(shù),我們可以通過(guò) params 獲取請(qǐng)求動(dòng)態(tài)id .
兩種寫法:
@Get(':id') findOne(@Param() params): string { console.log(params.id); return `This action returns a #${params.id} cat`; } @Get(':id') findOne(@Param('id') id: string): string { return `This action returns a #${id} cat`; }
以上就是Nest.js Controller路由和請(qǐng)求處理強(qiáng)大功能解析的詳細(xì)內(nèi)容,更多關(guān)于Nest.js Controller路由請(qǐng)求處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查
這篇文章主要介紹了詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Node在Controller層進(jìn)行數(shù)據(jù)校驗(yàn)的過(guò)程詳解
這篇文章主要給大家介紹了關(guān)于Node在Controller層進(jìn)行數(shù)據(jù)校驗(yàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Node.js中的npm單獨(dú)與批量升級(jí)依賴包的方式超詳細(xì)講解
npm outdated僅檢查所有已安裝包的依賴關(guān)系,并將當(dāng)前版本遠(yuǎn)程倉(cāng)庫(kù)中的最新版本進(jìn)行對(duì)比,不會(huì)升級(jí),這篇文章主要介紹了Node.js中的npm單獨(dú)與批量升級(jí)依賴包的方式超詳細(xì)講解,需要的朋友可以參考下2024-02-02Node.js + express實(shí)現(xiàn)上傳大文件的方法分析【圖片、文本文件】
這篇文章主要介紹了Node.js + express實(shí)現(xiàn)上傳大文件的方法,結(jié)合實(shí)例形式分析了Node.js + express針對(duì)圖片、文本文件上傳操作實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03nodeJs爬蟲的技術(shù)點(diǎn)總結(jié)
本篇文章給大家總結(jié)了關(guān)于nodeJs爬蟲的技術(shù)點(diǎn)的相關(guān)知識(shí),對(duì)爬蟲有興趣的朋友可以跟著學(xué)習(xí)參考下。2018-05-05node.js中 mysql 增刪改查操作及async,await處理實(shí)例分析
這篇文章主要介紹了node.js中 mysql 增刪改查操作及async,await處理,結(jié)合實(shí)例形式分析了node.js中 mysql庫(kù)安裝、增刪改查操作及async,await處理相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-02-02node.js實(shí)現(xiàn)學(xué)生檔案管理
這篇文章主要為大家詳細(xì)介紹了node.js實(shí)現(xiàn)學(xué)生檔案管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05