最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nestjs @Param的實現(xiàn)示例

 更新時間:2025年08月04日 08:27:15   作者:掘鐵  
本文主要介紹了nestjs @Param的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、基礎(chǔ)入門:提取單個路由參數(shù)

定義路由參數(shù)
在控制器方法中,使用 :paramName 語法聲明路徑參數(shù):

import { Controller, Get, Param } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get(':id')
  findOne(@Param('id') id: string) {
    return `User ID: ${id}`; // 訪問 /users/123 返回 "User ID: 123"
  }
}

參數(shù)類型處理

默認返回字符串類型,如需數(shù)字或其他類型,需手動轉(zhuǎn)換:

@Get(':id')
findOne(@Param('id') id: string) {
  const numericId = parseInt(id, 10); // 轉(zhuǎn)為數(shù)字
  return `Numeric ID: ${numericId}`;
}

二、進階技巧:批量提取與類型安全

批量提取所有參數(shù)
直接使用 @Param() 不傳參數(shù),獲取所有路由參數(shù)的鍵值對:

@Get(':userId/posts/:postId')
findPost(@Param() params: { userId: string; postId: string }) {
  return `User ${params.userId}'s Post ${params.postId}`;
}

結(jié)合 DTO 實現(xiàn)類型安全
通過自定義類或接口定義參數(shù)結(jié)構(gòu):

interface RouteParams {
  userId: string;
  postId: string;
}

@Get(':userId/posts/:postId')
findPost(@Param() params: RouteParams) {
  return `User ${params.userId}'s Post ${params.postId}`;
}

三、高級應(yīng)用:參數(shù)驗證與嵌套路由

參數(shù)驗證(結(jié)合 @nestjs/validated
使用 class-validatorclass-transformer 驗證參數(shù):

import { IsNumberString } from 'class-validator';

class UserParams {
  @IsNumberString()
  id: string;
}

@Get(':id')
findOne(@Param() params: UserParams) {
  // 若 id 非數(shù)字,自動返回 400 錯誤
  return `Valid User ID: ${params.id}`;
}

嵌套路由中的參數(shù)提取
在模塊化路由中,參數(shù)會逐級傳遞:

// 模塊路由:/api/users/:userId/orders/:orderId
@Controller('users/:userId/orders')
export class OrdersController {
  @Get(':orderId')
  findOrder(
    @Param('userId') userId: string,
    @Param('orderId') orderId: string,
  ) {
    return `Order ${orderId} of User ${userId}`;
  }
}

四、最佳實踐:錯誤處理與性能優(yōu)化

參數(shù)缺失的默認處理
NestJS 會自動返回 404 錯誤,若需自定義響應(yīng):

@Get(':id')
findOne(@Param('id') id: string) {
  if (!id) {
    throw new NotFoundException('ID is required');
  }
  return `User ID: ${id}`;
}

性能優(yōu)化:緩存參數(shù)解析結(jié)果
對頻繁訪問的參數(shù),可在服務(wù)層緩存解析結(jié)果:

@Injectable()
export class UsersService {
  private cache = new Map<string, any>();

  findOne(id: string) {
    if (this.cache.has(id)) {
      return this.cache.get(id);
    }
    const user = { id, name: 'Example' }; // 模擬數(shù)據(jù)庫查詢
    this.cache.set(id, user);
    return user;
  }
}

五、常見問題與解決方案

問題:參數(shù)未提取到

  • 檢查路由路徑是否包含 :paramName。
  • 確保請求 URL 與路由定義匹配(如 /users/1 而非 /users?id=1)。

問題:參數(shù)類型錯誤

  • 顯式轉(zhuǎn)換類型(如 parseInt(id, 10))。
  • 使用 class-validator 進行嚴(yán)格驗證。

問題:嵌套路由參數(shù)沖突

  • 避免不同層級使用相同參數(shù)名(如 /users/:id/posts/:id 會沖突)。

六、完整示例:RESTful API 實現(xiàn)

import { Controller, Get, Param, Post, Body, NotFoundException } from '@nestjs/common';

interface CreateUserDto {
  name: string;
  email: string;
}

@Controller('users')
export class UsersController {
  private users = [{ id: '1', name: 'Alice', email: 'alice@example.com' }];

  @Get(':id')
  findOne(@Param('id') id: string) {
    const user = this.users.find(u => u.id === id);
    if (!user) {
      throw new NotFoundException('User not found');
    }
    return user;
  }

  @Post()
  create(@Body() userData: CreateUserDto) {
    const newUser = {
      id: Date.now().toString(),
      ...userData,
    };
    this.users.push(newUser);
    return newUser;
  }
}

到此這篇關(guān)于nestjs @Param的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)nestjs @Param 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原生js實現(xiàn)九宮格拖拽換位

    原生js實現(xiàn)九宮格拖拽換位

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)九宮格拖拽換位,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 微信小程序如何根據(jù)不同用戶切換不同TabBar(簡單易懂!)

    微信小程序如何根據(jù)不同用戶切換不同TabBar(簡單易懂!)

    小程序中我們可能需要根據(jù)不同的權(quán)限展示不同的tabbar,下面這篇文章主要給大家介紹了關(guān)于微信小程序如何根據(jù)不同用戶切換不同TabBar的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • JS+CSS實現(xiàn)簡單滑動門(滑動菜單)效果

    JS+CSS實現(xiàn)簡單滑動門(滑動菜單)效果

    這篇文章主要介紹了JS+CSS實現(xiàn)簡單滑動門(滑動菜單)效果,通過JavaScript響應(yīng)鼠標(biāo)事件動態(tài)設(shè)置頁面元素樣式實現(xiàn)滑動菜單功能,需要的朋友可以參考下
    2015-09-09
  • BootStrap給table表格的每一行添加一個按鈕事件

    BootStrap給table表格的每一行添加一個按鈕事件

    這篇文章主要介紹了BootStrap給table表格的每一行添加一個按鈕事件的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • 微信小程序使用swiper組件實現(xiàn)類3D輪播圖

    微信小程序使用swiper組件實現(xiàn)類3D輪播圖

    在寫微信小程序時,有寫到實現(xiàn)3D輪播圖的效果,可以直接使用微信小程序中自帶的組件swiper來實現(xiàn)。下面通過實例代碼給大家介紹微信小程序輪播圖的實現(xiàn)方法,感興趣的朋友一起看看吧
    2018-08-08
  • 解讀ES6中class關(guān)鍵字

    解讀ES6中class關(guān)鍵字

    這篇文章主要介紹了ES6中class關(guān)鍵字,class是es6引入的最重要特性之一。本文通過實例代碼給大家詳解,需要的朋友可以參考下
    2017-11-11
  • JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效

    JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效

    這篇文章主要給大家介紹了關(guān)于JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • javascript對象的創(chuàng)建和訪問

    javascript對象的創(chuàng)建和訪問

    這篇文章主要為大家詳細介紹了javascript對象的創(chuàng)建和訪問實現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • js獲得指定控件輸入光標(biāo)的坐標(biāo)兼容IE,Chrome,火狐等多種主流瀏覽器

    js獲得指定控件輸入光標(biāo)的坐標(biāo)兼容IE,Chrome,火狐等多種主流瀏覽器

    js獲得指定控件光標(biāo)的坐標(biāo),兼容IE,Chrome,火狐等多種主流瀏覽器,實現(xiàn)代碼及調(diào)用代碼如下,感興趣的朋友可以參考下哈,希望對你有所幫助
    2013-05-05
  • js隨機生成網(wǎng)頁背景顏色的方法

    js隨機生成網(wǎng)頁背景顏色的方法

    這篇文章主要介紹了js隨機生成網(wǎng)頁背景顏色的方法,涉及javascript操作背景色的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

洛浦县| 广昌县| 泽库县| 子洲县| 搜索| 西贡区| 光泽县| 大邑县| 宿迁市| 正安县| 灵武市| 定襄县| 福州市| 二连浩特市| 嘉黎县| 明水县| 金秀| 西和县| 梅河口市| 宁明县| 双牌县| 广汉市| 绍兴市| 霞浦县| 通州区| 汕尾市| 吴江市| 台江县| 长乐市| 阿合奇县| 高陵县| 旺苍县| 抚宁县| 噶尔县| 长汀县| 德钦县| 竹山县| 资阳市| 敖汉旗| 尚志市| 祁门县|