Nest.js学习笔记2:创建一个Controller和routing

本文档介绍了如何在Nest.js中创建Controller和路由。Controller用于处理请求并返回响应,而路由控制哪些Controller接收特定请求。通过NestCLI可快速创建Controller,然后定义GET和POST路由。GET路由示例展示了如何返回JSON响应,而POST路由讲解了如何处理请求详情和响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个Controller(控制器)和routing(路由)

Controller(控制器)

Controller负责处理传入的请求, 并返回对客户端的响应。

Controller目的是接收应用的特定请求。routing控制哪个控制器接收哪些请求。通常,每个Controller有多个routing,不同的routing可以执行不同的操作.
为了创建一个基本的Controller,我们必须使用装饰器。装饰器将类与所需的元数据关联,并使Nest能够创建路由routing(将请求绑定到相应的Controller)。

使用使用NestCLI 创建Controller,

nest g controller cats

也可以简写为

nest g co cats

然后会看到

wujiayudeMacBook-Pro:hello-nest wjy$ nest g controller cats
CREATE /src/cats/cats.controller.spec.ts (479 bytes)
CREATE /src/cats/cats.controller.ts (97 bytes)
UPDATE /src/app.module.ts (322 bytes)

NestCLI创建了controller cats,并将cats注入到了app.module

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

@Controller('cats')
export class CatsController {
}
  • app.module
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsController } from './cats/cats.controller';

@Module({
  imports: [],
  controllers: [AppController, CatsController],
  providers: [AppService],
})
export class AppModule {}

routing(路由)

创建一个get路由

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

@Controller('cats')
export class CatsController {
  @Get()
  findAllCats() {
    return '这里是Controller:cats的findAllCats方法~';
  }
}

findAllCats() 方法的上面 @Get() 修饰符告诉 Nest 创建此路由路径的端点,并将每个相应的请求映射到此处理程序。由于我们为每个路由声明了前缀(cats),所以 Nest 会在这里映射每个 /cats 的 GET 请求。

这时候,在浏览器中输入:http://localhost:3000/cats
在这里插入图片描述
当客户端调用此端点时, Nest 将返回 200 状态码和解析的 JSON。
有两种可能的方法来处理响应:

  • 标准方法
    处理程序的处理方式与普通函数相同。当我们返回 JavaScript 对象或数组时, 它会自动转换为 JSON。当我们返回字符串, Nest 将只发送一个字符串而不尝试解析它。
    响应状态代码在默认情况下总是 200, 除了 POST(响应状态码是201)。对于POST可以通过在处理程序层添加 @HttpCode(…) 装饰器来更改为200。
  • 类库特有的
    我们可以在函数签名通过 @Res() 注入类库特定的响应对象(等待学习:类库特有方式时细说)

注意: 禁止同时使用这两种方法。 Nest 检测处理程序是否正在使用 @Res()或 @Next(),如果两个方法都用了的话, 那么在这里的标准方式就是自动禁用此路由, 将不会得到想要的结果

请求细节(Request)

Nest默认使用express的特有类库,当需要访问客户端请求细节的时候,就可以强制使用@Req() 装饰器将请求对象注入处理程序。
将上面的cats改写成使用@Req()的形式:

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

@Controller('cats')
export class CatsController {
  @Get()
  findAllCats(@Req() request) {
    return '这里是Controller:cats的findAllCats方法~';
  }
}

重新运行;输入http://localhost:3000/cats,正常返回。

装饰器普通表达对象
@Request()req
@Response()res
@Next()next
@Session()req.session
@Param(param?: string)req.params / req.params[param]
@Body(param?: string)req.body / req.body[param]
@Query(param?: string)req.query / req.query[param]
@Headers(param?: string)req.headers / req.headers[param]

对于常用的请求,除了GET还有POST,故…

再来一个POST路由

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

@Controller('cats')
export class CatsController {
  @Post()
  createPost() {
    return '这里是Controller:POST路由的cats的createPost方法~';
  }

  @Get()
  findAllCats() {
    return '这里是Controller:cats的findAllCats方法~';
  }
}


重新运行,这里为了测试POST路由,所以使用Postman;
测试结果如下:
在这里插入图片描述
同样的,Nest以相同的方式提供其余的端点装饰器- @Put() 、 @Delete()、 @Patch()、 @Options()、 @Head()和 @All()。这些表示各自的HTTP请求方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wujiayucn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值