Nest.js是一个高效、可扩展的Node.js框架,用于构建服务器端应用程序。它使用TypeScript编写,结合了面向对象编程、函数式编程和函数响应式编程的最佳实践。在Nest.js中,控制器负责处理传入的请求并返回响应给客户端。

路由

在Nest.js中定义路由非常简单。控制器使用装饰器来定义路由路径和请求方法类型。

  • @Controller() 装饰器用于声明一个类作为控制器,并可以指定基础路径。
  • @Get(), @Post(), @Put(), @Delete() 等装饰器则分别对应HTTP请求方法GET, POST, PUT, DELETE等,并可以指定特定的路径。

例如:

@Controller('cats')
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}

这里 CatsController处理所有到 /cats GET 请求,并返回一个字符串。

请求对象

Nest提供了许多装饰器来访问请求对象中的数据:

  • @Req() 或者直接使用快捷方式如:@Body(), @Query(), 和 @Param() 来获取POST数据体、URL查询参数或者URL参数。

例如:

@PostMapping()
async create(@Body(new ValidationPipe()) createCatDto: CreateCatDto) {
  return this.catsService.create(createCatDto);
}

这里通过ValidationPipe自动验证传入数据并将其转换为CreateCatDto实例。

高级路由技巧

路径变量和状态码

你可以利用模式匹配在路由路径中设置变量(如 :id),并通过装饰器获取这些变量值。同时也能够设置特定HTTP状态码作为响应:

 @Get(':id')
 findOne(@Param('id') id: string): Cat {
   return this.catsService.findOne(id);
 }

 @Post()
 @HttpCode(204)
 create(): void {
   // ...
 }

异步处理

异步功能是现代Web框架不可或缺的一部分。在Nest.js中你可以轻松地返回Promise或Observable流:

@GetMapping('/async')
async findAllAsync(): Promise<Cat[]> {
    return await this.catsService.findAll();
}

拦截器与异常过滤

拦截其允许你拦截进出控制层方法之间流动信息流,在此过程添加额外逻辑(如日志记录、错误处理等):

UseInterceptors(LoggingInterceptor)
export class CatsController {}

异常过滤则允许捕获异常并根据需要进行自定义响应:

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {}

守卫与管道

守卫主要负责权限认证,在进入某个路由之前进行检查;管道则主要负责输入数据转换与验证工作:

UseGuards(RolesGuard)
export class CatsController {}

UsePipes(new ValidationPipe())
export class CreateCatDto {}

以上就是对 NestJS 控制层高级特性深度解析:从基本概念到异步支持再到更复杂场景下拦截其与管道等功能性组件运用都有所涉及,希望能够帮助开发者更好地理解和运用 NestJS 进行高效开发工作。

云服务器/高防CDN推荐

蓝易云国内/海外高防云服务器推荐


海外免备案云服务器链接:www.tsyvps.com

蓝易云安全企业级高防CDN:www.tsycdn.com

持有增值电信营业许可证:B1-20222080【资质齐全】

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。


百度搜索:蓝易云

蓝易云是一家专注于香港及国内数据中心服务的提供商,提供高质量的服务器租用和云计算服务、包括免备案香港服务器、香港CN2、美国服务器、海外高防服务器、国内高防服务器、香港VPS等。致力于为用户提供稳定,快速的网络连接和优质的客户体验。
最后修改:2023 年 12 月 25 日
如果觉得我的文章对你有用,请随意赞赏