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)起來,將請(qǐng)求綁定到相應(yīng)的控制器。
可以使用Nest-cli 提供的指令 快速創(chuàng)建一個(gè) CURD
nest g resource [name]
路由
@Controller 是 Nest 的基本控制器,通過修飾器 @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()方法
}
}通過 訪問 http://localhost:3000/user/getUserInfo 就可以訪問到響應(yīng)數(shù)據(jù)。
@Controller 裝飾器 修飾 類,該類就擁有和裝飾器關(guān)聯(lián)的屬性和功能,傳遞了一個(gè)參數(shù) user , 說明當(dāng)前路由分組名稱為 user , 當(dāng)前類下的所有基準(zhǔn)路由都是 /user/ 開頭了。
通過 HTTP 請(qǐng)求方法裝飾器 修飾方法,它會(huì)方法告訴 Nest 為 HTTP 請(qǐng)求的特定端點(diǎn)創(chuàng)建處理程序。
栗子中,getUserInfo 方法被 @Get 所修飾,所以它是一個(gè) Get 請(qǐng)求。
請(qǐng)求參數(shù)裝飾器
通過對(duì)客戶端發(fā)起的請(qǐng)求參數(shù)做解析處理,Nest 提供的訪問請(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 , 我們可以通過添加 @HttpCode(...)處理程序級(jí)別的裝飾器。 指定請(qǐng)求 Code
@Post()
@HttpCode(204)
create() {
return 'This action adds a new cat';
}自定義響應(yīng)頭
可以通過使用 @Header()裝飾器或特定于庫的響應(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 來重定向,@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 來獲取,在Nest 中,可以使用 @Param()裝飾器,
它用于修飾方法參數(shù),我們可以通過 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)文章
淺談Node.js CVE-2017-14849 漏洞分析(詳細(xì)步驟)
這篇文章主要介紹了淺談Node.js CVE-2017-14849 漏洞分析(詳細(xì)步驟),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(9):實(shí)現(xiàn)非阻塞操作,本系列文章會(huì)教你一步一步創(chuàng)建一個(gè)完整的服務(wù)器,要的朋友可以參考下2014-12-12
Node.js實(shí)現(xiàn)文本與pdf相互轉(zhuǎn)換的代碼詳解
在IT行業(yè)中,文檔格式轉(zhuǎn)換是日常工作中的常見需求,Word與PDF是兩種廣泛應(yīng)用的文檔格式,它們各有優(yōu)勢(shì),但有時(shí)需要相互轉(zhuǎn)換以滿足特定場(chǎng)景的需求,本篇將詳細(xì)講解如何使用Node.js實(shí)現(xiàn)文本與pdf相互轉(zhuǎn)換,需要的朋友可以參考下2025-07-07
詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)
這篇文章主要介紹了詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
websocket實(shí)現(xiàn)Vue?3和Node.js之間的實(shí)時(shí)消息推送
使用?WebSocket?實(shí)現(xiàn)實(shí)時(shí)消息推送是一種高效的方式,可以在客戶端和服務(wù)器之間建立長(zhǎng)連接,實(shí)現(xiàn)低延遲的雙向通信,以下是一個(gè)簡(jiǎn)單的示例,展示如何在前端使用?Vue?3?和后端使用?Node.js?搭建一個(gè)?WebSocket?實(shí)現(xiàn)實(shí)時(shí)消息推送的應(yīng)用2024-06-06

