一、NestJS中的控制器

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

    1. nest g controller article
    2. nest g co article // 简写

    二、NestJS中的路由

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

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

@Controller(‘article’) export class ArticleController { @Get() index(): string { return ‘这是 article 里面的 index’; }

  1. @Get('add')
  2. add(): string {
  3. return '这是 article 里面的 add';
  4. }

}

  1. - 关于 nest return 当请求处理程序返回 JavaScript 对象或数组时,它将自动序列化为 JSON。但是,当它返回一个字符串时,Nest 将只发送一个字符串而不是序列化它。这使响 应处理变得简单:只需要返回值,Nest 负责其余部分
  2. <a name="QgWIf"></a>
  3. ### 三、NestJS 中的 Get Post 以及通过方法参数装饰器获取传值
  4. <a name="lAg6J"></a>
  5. ##### 1、首先看一个 Get Post 请求的例子,注意我们使用 nestjs 内置装饰器的时候必须得在 @nestjs/common 模块下面引入对应的装饰器
  6. - Nestjs 也提供了其他 HTTP 请求方法的装饰器 @Put() @Delete()、@Patch()、 @Options()、 @Head() @All()
  7. ```typescript
  8. import { Controller, Get, Post } from '@nestjs/common';
  9. @Controller('article')
  10. export class ArticleController {
  11. @Get()
  12. findAll(): string {
  13. return '这是 article 里面的 index';
  14. }
  15. @Post()
  16. create(): string {
  17. return '这是 post 里面的 create';
  18. }
  19. }

2、Nestjs 中获取请求参数
  • Request 对象代表 HTTP 请求,并具有查询字符串,请求参数参数,HTTP 标头(HTTP header) 和 正文(HTTP body)的属性(在这里阅读更多)。在多数情况下,不必手动获取它们。 我们可以使用专用的装饰器,比如开箱即用的 @Body() 或 @Query() 。 下面是 Nest 提供的装饰器及其代表的底层平台特定对象的对照列表。
    1. @Request(),@Req() req
    2. @Response(),@Res()* res
    3. @Next() next
    4. @Session() req.session
    5. @Param(key?: string) req.params / req.params[key]
    6. @Body(key?: string) req.body / req.body[key]
    7. @Query(key?: string) req.query / req.query[key]
    8. @Headers(name?: string) req.headers / req.headers[name]
    9. @Ip() req.ip
    10. @HostParam() req.hosts
    ```typescript import { Body, Controller, Get, Post, Query, Request } from ‘@nestjs/common’;

@Controller(‘article’) export class ArticleController { @Get() index() { return ‘默认路由 http://localhost:3000/article‘; }

  1. @Get('add')
  2. addData(@Query() query) {
  3. console.log(query)
  4. return '通过 @Query() 获取 get 传值';
  5. }
  6. @Get('edit')
  7. editData(@Request() req) {
  8. console.log(req.query)
  9. return '通过 @Request() 获取 get 传值';
  10. }
  11. @Post('create')
  12. create(@Body() body) {
  13. console.log(body)
  14. return '通过 @Body() 获取 post 传值';
  15. }

}

  1. <a name="M2qIs"></a>
  2. ### 四、NestJS 中的动态路由
  3. - 当您需要接受动态数据作为请求的一部分时,具有静态路径的路由将不起作用(例如,GET /cats/1)获取具有 id 的 cat 1)。为了定义带参数的路由,我们可以在路由中添加路由参数标 记,以捕获请求 URL 中该位置的动态值。@Get() 下面的装饰器示例中的路由参数标记演 示了此用法。可以使用 @Param() 装饰器访问以这种方式声明的路由参数,该装饰器应添 加到函数签名中
  4. ```typescript
  5. @Get(':id')
  6. findOne(@Param() params) {
  7. console.log(params.id);
  8. return '通过 @Param() 获取动态路由参数';
  9. }

五、方法参数装饰器获取传值也可以取具体的某个值

  1. // @Query('id') 传入参数就只取传入参数的值
  2. @Get('add')
  3. addData(@Query('id') id) {
  4. console.log(id)
  5. return '通过 @Query() 获取 get 传值';
  6. }