Nestjs中的控制器、路由 、Get、Post使用整理

6,643 阅读3分钟

1、NestJS中的控制器

Nest中的控制器层负责处理传入的请求,并返回对客户端的响应。 控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常, 每个控制器有多个路由,不同的路由可以执行不同的操作。 可以通过NestCLi创建控制器:

nest g controller news

2、NestJS中的路由

Nestjs中没有单独配置路由的地方。定义好控制器后nestjs会自动给我们配置对应的路由。

下面代码定义了一个新闻控制器。装饰器为@Controller('article'),装饰器参数里面的'article'就是我们的路由。

如果我们要返回index方法里面的内容我们在浏览器输入http://localhost:3000/article

如果我们要返回add方法里面的内容我们在浏览器输入http://localhost:3000/article/add

import { Controller, Get } from '@nestjs/common';
@Controller('article')
export class ArticleController {
  @Get()
  index(): string {
  	return '这是 article 里面的 index';
  }
  @Get('add')
  add(): string {
  	return '这是 article 里面的 index';
  }
}

nest的return: 当请求处理程序返回JavaScript对象或数组时,它将自动序列化为JSON。但是,当它返回一个字符串时,Nest将只发送一个字符串而不是序列化它。这使响应处理变得简单,只需要返回值,Nest负责其余部分。

3、NestJS中的GetPost以及通过方法参数装饰器获取传值

1、首先看一个GetPost请求的例子,注意我们使用nestjs内置装饰器的时候必须得在

@nestjs/common模块下面引入对应的装饰器。

import { Controller , Get , Post } from '@nestjs/common';
@ Controller('cats')
export class CatsController {
    @ Post()
    create(): string {
        return 'This action adds a new cat';
    }
    @ Get()
        findAll(): string {
    return 'This action returns all cats';
}}

Nestjs也提供了其他HTTP请求方法的装饰器@Put()@Delete()@Patch()@Options()@Head()@All()

2 、Nestjs中获取请求参数

Nestjs中获取Get传值或者Post提交的数据的话我们可以使用Nestjs中的装饰器来获取。

  • @Request() req
  • @Response() 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]
import { Controller, Get, Post } from '@nestjs/common';
@Controller('news')
export class NewsController {
    @Get()
    getAbout(@Query() query):string {
        console.log(query); //这里获取的就是所有的 Get 传值
        return '这是 about';
    }
    @Get('list')
    getNews(@Query('id') query):string {
        console.log(query); //这里获取的就是 Get 传值里面的 Id 的值
        return '这是新闻';
    }
    @Post('doAdd')
    async addNews(@Body() newsData){
        console.log(newsData);
        return '增加新闻';
    }
}

4 、NestJS中的动态路由

当您需要接受动态数据作为请求的一部分时,具有静态路径的路由将不起作用(例如,GET/cats/1)获取具有idcat1)。为了定义带参数的路由,我们可以在路由中添加路由参数标记,以捕获请求URL中该位置的动态值。@Get()下面的装饰器示例中的路由参数标记演示了此用法。可以使用@Param()装饰器访问以这种方式声明的路由参数,该装饰器应添加到函数签名中。

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