002nestjs控制器(controller)

一、控制器的作用

控制器负责处理传入请求并向客户端返回响应

二、使用方法

新建/cats目录
创建cats.controller.ts
在里面添加如下内容

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

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

其中
@controller代表这是一个控制器类,里面的参数cats代表匹配路径为/cats
@Get装饰器代表可以匹配的Http请求(此处是GET),并且装饰器中可以添加路径,如

  @Get('/breed')
  findAll(): string {
    return 'This action returns all cats';
  }

可以命中的路径为/cats/breed,还支持通配符?、+、* 和 ()

@Get('ab*cd')
findAll() {
  return 'This route uses a wildcard';
}

可以匹配的路由有 abcd、ab_cd、abecd
nest还提供了其他方法的装饰器,如@Get()、@Post()、@Put()、@Delete()、@Patch()、@Options() 和 @Head()
findAll代表匹配之后触发的方法,名称可以随意取

三、请求对象

nest提供对请求对象的访问(默认使用express)

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

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

@Req()使用之后可以访问到请求对象
nest还提供了许多装饰器用于获取请求对象的某些属性

名称 对用的请求属性
@Request(), @Req() req
@Response(), @Res()* res
@Next() next
@Session() req.session
@Param(key?: string) req.params / req.params[key]
@Body(key?: string) req.body / req.body[key]
@Query(key?: string) req.query / req.query[key]
@Headers(name?: string) req.headers / req.headers[name]
@Ip() req.ip
@HostParam() req.hosts

四、路由相关设置

1.状态码

可以通过@HttpCode()设置状态码

@Post()
@HttpCode(204)
create() {
  return 'This action adds a new cat';
}

2.标头

使用 @Header() 装饰器,设置自定义标头内容

@Post()
@Header('Cache-Control', 'none')
create() {
  return 'This action adds a new cat';
}

3.重定向

使用@Redirect重定向路由

@Get()
@Redirect('https://nest.nodejs.cn', 301)
findAll(): string {
  return 'This action returns all cats';
}

4.路由参数

接收动态路由参数,如: /cats/1

@Get(':id')
findOne(@Param() params: any): string {
  console.log(params.id);
  return `This action returns a #${params.id} cat`;
}

接收query参数,如:/cats?name=abc&age=12

@Get()
  findAll(@Query() obj: any): string {
    console.log('obj ', obj)
    return 'This action returns all cats';
  }

此外@Query()装饰器可以接收一个字符串来获取指定的属性

@Get()
  findAll(@Query('name') obj: any): string {
    console.log('name', obj)
    return 'This action returns all cats';
  }
posted @   我喝牛奶不舔盖  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
I hear and I forget. I see and I remember. I do and I understand
点击右上角即可分享
微信分享提示