Nest:路由、控制器、服务(三)

路由 (Routing)

在 Nest.js 中,路由定义了客户端请求与服务器响应之间的映射关系。

每个路由关联一个 URI 和一个 HTTP 请求方法(如 GET、POST 等)。

控制器(Controllers)

控制器是管理路由请求的组件,通过类实现,并与模块(Modules)相关联。

在 Nest.js 中,用装饰器(Decorators)来定义控制器和路由规则:

  • @Controller() 装饰器定义一个基本的控制器。可传递一个路径前缀,这样所有的路由都会基于这个前缀。
  • @Get(), @Post(), @Put(), @Delete() 等装饰器用于定义具体的请求方法和路径。
typescript 复制代码
import { Controller, Get } from '@nestjs/common';

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

在此例中,CatsController 控制器定义了一个 GET 请求的路由 /cats,当请求到达时,将调用 findAll 方法并返回所有猫咪的信息。

服务(Service)

服务是 Nest.js 的核心概念之一,用于封装业务逻辑,如数据库交互、外部接口调用等。服务通过 @Injectable() 装饰器标注的类实现。

创建服务

服务可以通过 CLI 命令 nest generate service [name] 创建,或手动添加 @Injectable() 装饰器。例如:

typescript 复制代码
import { Injectable } from '@nestjs/common';

@Injectable()
export class YourService {
  // 业务逻辑方法
  test() {
    // 执行一些逻辑操作,返回处理后的结果
    return result;
  }
}

注入服务

服务可以注入到控制器或其他服务中,Nest.js 的依赖注入系统会自动实例化服务。例如:

typescript 复制代码
import { Controller } from '@nestjs/common';
import { YourService } from './your.service';

@Controller('your-route')
export class YourController {
  // 注入服务
  constructor(private yourService: YourService) {}

  // 使用 yourService 的方法
  @Get()
  find() {
    this.yourService.test();
  }
}

控制器通过调用服务方法来处理 HTTP 请求,并返回响应。

路由的设置

路由设置通过装饰器在控制器中定义,支持静态和动态路径。动态路径参数通过 @Param() 装饰器获取。例如:

typescript 复制代码
import { Controller, Get, Param } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Get(':id')
  findOne(@Param('id') id: string): string {
    return `This action returns a #${id} cat`;
  }
}

访问 /cats/1 时,findOne 方法返回 This action returns a #1 cat

在 Nest.js 中,@Get()@Post() 是两个常用的装饰器,它们分别用来处理 HTTP 的 GET 和 POST 请求。

@Get()

当客户端向服务器发送 GET 请求时,Nest.js 会调用使用了 @Get() 装饰器的方法来处理这个请求。

typescript 复制代码
import { Controller, Get } from '@nestjs/common';

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

在上面的例子中,当客户端向 /cats 发送 GET 请求时,findAll() 方法会被调用,并返回所有猫咪的信息。

@Post()

当客户端向服务器发送 POST 请求时,Nest.js 会调用使用了 @Post() 装饰器的方法来处理这个请求。

typescript 复制代码
import { Controller, Post } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Post()
  create(): string {
    return 'This action adds a new cat';
  }
}

发送 POST 请求到 /cats 时,create() 方法被调用,添加新猫咪。

相关推荐
军军君015 分钟前
Three.js基础功能学习三:纹理与光照
前端·javascript·3d·前端框架·three·三维·三维框架
淡笑沐白6 分钟前
Vue3基础语法教程
前端·javascript·vue.js
JIngJaneIL14 分钟前
基于java + vue连锁门店管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
Mintopia14 分钟前
🧠 从零开始:纯手写一个支持流式 JSON 解析的 React Renderer
前端·数据结构·react.js
消失的旧时光-194326 分钟前
Flutter 工程中 mixin 的正确打开方式:5 种高质量设计范式 + mixin vs 继承 vs 组合 + 为什么它比 BasePage 更优雅
前端·flutter·架构
乐吾乐科技29 分钟前
乐吾乐3D可视化2025重大更新与2026升级计划
前端·3d·信息可视化·编辑器·数据可视化
C_心欲无痕30 分钟前
html - 使用视频做天气卡片背景
前端·html·音视频
毕设十刻1 小时前
基于Vue的养老服务平台85123(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
青衫折扇1 小时前
执行 npm 安装命令时,包被装到了 C 盘用户目录下,而非项目根目录
前端·npm·node.js
XiaoYu20021 小时前
第2章 Nest.js入门
前端·ai编程·nestjs