Nest学习-控制器篇

控制器是由类和装饰器组成的,控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。

cli命令创建控制器

使用nest cli命令创建控制器
执行nest generate controller或简写:nest g co后会提示输入控制器名称,此命令会帮我们自动创建控制器和相应的测试文件,并自动配置AppModule,如果不想生成测试文件,可以向该命令传递--no-spec。生成的控制器在src/abc下,如果想在指定目录下生成,例如:nest g co module/abc将被放置在/src/module/abc

定义路由

所有HTTP修饰器都可以指定一个string类型的参数
所有参数修饰器都可以指定一个string类型的参数用来解析请求路径/请求体中的指定参数

下面代码中在 @Controller() 装饰器中使用animal路径前缀,这个控制器会处理所有路径以/animal开头的请求

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

@Controller('animals')
export class AnimalController {}

此时的控制器没有任何路由,接下来,需要在animal控制器中定义一个捕获GET请求的路由

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

@Controller('animals')
export class AnimalController {
  @Get()
  findAll(){
    return 'animals';
  }
}

上面的findAll方法,被@Get修饰器装饰。/animal路径的GET请求都会都会映射到findAll方法中并返回结果animal
所有HTTP修饰器都可以指定一个string类型的参数,可以创建一个处理指定URL的路由,例如:处理来自/animals/cats路径的GET请求

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

@Controller('animals')
export class AnimalController {
  @Get("cats")
  findAll(){
    return 'all cats';
  }
}

路由参数

假设向/animals/xxx发出一个GET请求,其中的xxx是动态,定义这种具有动态属性的路径,可以给HTTP修饰器传入参数标记,用来捕获请求路径中这个位置的动态参数,可以用@Param装饰器获取请求路径的动态参数,也可以传入一个指定的参数给装饰器,然后在函数体内直接使用

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

@Controller('animals')
export class CoffeesController {
  @Get(":id")
  findOne(@Param() params){
    return params.id;
  }
  @Get()
  findSome(@Query() query,@Query('id') id,@Query('name') name){
    return `query is ${query},id is ${id},name is ${name}`
  }
}

如上面的例子,当请求路径为/coffees/XXX时,会被映射到findOne方法中,并且这个方法会读取到请求路径中的动态参数。当请求路径为/coffees时,会被映射到findSome方法中,并且这个方法会读取到请求的Query参数,并且可以传递给参数装饰器一个string参数,然后在方法体内直接使用该参数,而不是通过query.xxx的方式,
@Query("id") id将请求体的id参数赋值给id变量,便于函数中直接使用
@Query("name") name将请求体的name参数赋值给name变量,便于函数中直接使用

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值