深入了解 NestJS 控制器(Controllers):功能、應用與實作範例(2025 最新版)

深入了解 NestJS 控制器(Controllers)

目錄

深入了解 NestJS 控制器(Controllers)

NestJS 是一個基於 TypeScript 的 Node.js 框架,旨在構建高效、可擴展的企業級伺服器端應用程序。它提供了模塊化的架構,讓開發者能夠快速開發和部署應用程序。控制器在 NestJS 中扮演著重要的角色,負責接收 HTTP 請求並返回響應,幫助開發者將應用程序的功能進行小型化分解。

控制器的定義與創建

控制器使用 @Controller() 裝飾器來定義,並接受一個字符串參數來指定路由前綴。

@Controller('users')
export class UsersController {
  // ...
}

HTTP 方法裝飾器

控制器中的方法可以使用多種 HTTP 方法的裝飾器來定義,例如 @Get()@Post()@Put()@Delete()

@Controller('users')
export class UsersController {
  @Get('/')
  getUsers() {
    // 回傳用戶資料
  }
}

使用拦截器、管道與守衛

控制器可以使用多種裝飾器來增強功能:

  • @UseInterceptors():添加拦截器,在方法調用之前或之後執行額外操作。
  • @Controller('users')
    @UseInterceptors(LoggingInterceptor)
    export class UsersController {
      @Get('/')
      getUsers() {
        // ...
      }
    }
    
  • @UsePipes():添加管道,用於請求參數的驗證和轉換。
  • @Controller('users')
    @UsePipes(ValidationPipe)
    export class UsersController {
      @Post('/')
      createUser(@Body() user: User) {
        // ...
      }
    }
    
  • @UseGuards():添加守衛,檢查請求的有效性。
  • @Controller('users')
    @UseGuards(AuthGuard)
    export class UsersController {
      @Get('/')
      getUsers() {
        // ...
      }
    }
    

響應與請求處理

在 NestJS 控制器中,開發者可以使用以下裝飾器來處理 HTTP 響應和請求:

  • @Res():訪問 HTTP 響應對象。
  • @Controller('users')
    export class UsersController {
      @Get('/')
      getUsers(@Res() res) {
        res.status(HttpStatus.OK).send('OK');
      }
    }
    
  • @Req():訪問 HTTP 請求對象。
  • @Controller('users')
    export class UsersController {
      @Get('/')
      getUsers(@Req() req) {
        const userId = req.query.userId;
        // ...
      }
    }
    
  • @Param()@Body()@Query()@Headers() 等裝飾器用於獲取相應的請求參數。
  • @Controller('users')
    export class UsersController {
      @Get('/:userId')
      getUser(@Param('userId') userId: string) {
        // ...
      }
    }
    

文件上傳與會話管理

控制器還可以處理文件上傳和會話管理:

@Controller('users')
export class UsersController {
  @Post('/avatar')
  @FileInterceptor('avatar')
  uploadAvatar(@UploadedFile() avatar) {
    // ...
  }
}

常見錯誤排除

在開發過程中,可能會遇到一些常見的錯誤。以下是幾個排除建議:

  • 確保所有裝飾器正確使用,並符合 NestJS 的規範。
  • 檢查路由是否正確配置,確保控制器能夠正確處理請求。
  • 使用日誌工具來追蹤錯誤,便於查找問題所在。

延伸應用

NestJS 控制器可擴展用於各種應用,從簡單的 RESTful API 到複雜的企業級應用。了解控制器的使用可以幫助開發者更好地組織和管理代碼,提高開發效率。

Q&A(常見問題解答)

Q1: NestJS 控制器的主要作用是什麼?

A1: NestJS 控制器的主要作用是接收 HTTP 請求並返回響應,幫助開發者將應用程序的功能分解為小型化的部分。

Q2: 如何在 NestJS 中使用管道進行請求參數的驗證?

A2: 可以使用 @UsePipes() 裝飾器來添加管道,對請求參數進行驗證和轉換。

Q3: NestJS 支持哪些 HTTP 方法的裝飾器?

A3: NestJS 支持多種 HTTP 方法的裝飾器,包括 @Get()@Post()@Put()@Delete() 等。

此文章經過優化後,包含了最新的語法和最佳實踐,並附上了實作範例、錯誤排除建議及相關的延伸應用,讓讀者能夠更全面地掌握 NestJS 控制器的使用。

發佈留言