首页 > 其他分享 >Nest.js Controller 解析:探索路由和请求处理的强大功能

Nest.js Controller 解析:探索路由和请求处理的强大功能

时间:2023-10-16 18:32:23浏览次数:30  
标签:请求 Get Nest req js Controller id 路由


Nest.js Controller 解析:探索路由和请求处理的强大功能_HTTP

Controller  它 主要是负责 特定路由请求处理并将响应结果返回给客户端。

每个控制器 它会有多个路由,不同路由对应不同的业务请求处理。

Nest  中, 创建一个 控制器,应该使用类 和 装饰器 , 装饰器会使类相关联的数据的关联起来,将请求绑定到相应的控制器。

可以使用Nest-cli 提供的指令 快速创建一个 CURD

nest g resource [name]

1.3.1  路由

@Controller  是 Nest 的基本控制器,通过修饰器 @Controller  可以将路由分组,模块化进行路由的管理,并最大限度的减少了代码重复性。

路由的 形成 :

  • 控制器装饰器前缀@Controller('user')  +
  • 请求方法装饰器结合 @Get('getDeatil')

将形成路由映射user/getDeatail

如何进行路由分组呢?

  • @Controller 接受一个参数,这可参数可选,默认如果不传,  就是 /
  • @Controller(分组名)
import { Controller, Get, Param, Post } from '@nestjs/common';
import { UserService } from '../service/index';

const result: Object = {
  code: 200,
  data: {
    str: '微信公众号:前端自学社区',
    arrList: [1, 2, 3, 4],
  },
};

@Controller('user')
export class UserController {
  // 使用依赖注入的方式注入一个类
  constructor(private readonly userService: UserService) {}
  @Get('getUserInfo') // 定义http的请求方式为get请求
  getUserInfo(): object {
    // 函数名可以随便定义
    return this.userService.getUserInfo(result); // 控制层调用服务层的getHello()方法
  }
}

通过 访问 http://localhost:3000/user/getUserInfo  就可以访问到响应数据。

@Controller 装饰器 修饰 类,该类就拥有和装饰器关联的属性和功能,传递了一个参数  user ,  说明当前路由分组名称为 user , 当前类下的所有基准路由都是 /user/  开头了。

通过 HTTP 请求方法装饰器  修饰方法,它会方法告诉 Nest 为 HTTP 请求的特定端点创建处理程序。

栗子中,getUserInfo  方法被 @Get 所修饰,所以它是一个 Get 请求。

1.3.2 请求参数装饰器

通过对客户端发起的请求参数做解析处理,Nest 提供的访问请求对象 默认方式为 express .

Nest

express

备注

@Request(), @Req()

req


@Response(), @Res()*

res


@Next()

next


@Session()

req.session

请求携带的session

@Param(key?: string)常用

req.params/  req.params[key]

获取请求携带的动态参数  eg: /user/adxin    daxin 就是动态参数

@Body(key?: string)常用

req.body/  req.body[key]

获取请求体参数

@Query(key?: string)常用

req.query/  req.query[key]

获取 url?id=   携带的参数, 通常是get

@Headers(name?: string)常用

req.headers/  req.headers[name]

获取请求头内容

@Ip()

req.ip


@HostParam()

req.hosts


@Get('getQueryUser:id')
  getQueryUser(@Param() params) {
    return this.userService.getQueryUser(params);
  }

Nest 为所有标准 HTTP 方法提供装饰器:

@Get(),  @Post(),  @Put(),  @Delete(),  @Patch(),  @Options(), 和 @Head().  此外, @All()定义处理所有这些的端点。

1.3.3 路由通配符

支持基于模式的路由。  例如,星号用作通配符,将匹配任何字符组合。

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

'ab*cd'路由路径将匹配 abcd,  ab_cd,  abecd, 等等

1.3.4 请求状态码

响应状态码默认为 200 , POST201 , 我们可以通过添加 @HttpCode(...)处理程序级别的装饰器。   指定请求 Code

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

1.3.5 自定义响应头

可以通过使用 @Header()装饰器或特定于库的响应对象(并调用 res.header()直接地)。

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

1.3.6 重定向

响应重定向到特定 URL,响应重定向到特定 URL 来重定向,@Redirect()需要两个参数, urlstatusCode,两者都是可选的。  默认值为 statusCode302 ( Found) 如果省略。

@Get('docs')
@Redirect('https://docs.nestjs.com', 302)
getDocs(@Query('version') version) {
  if (version && version === '5') {
    return { url: 'https://docs.nestjs.com/v5/' };
  }

1.3.7 路由参数

当获取某个文章或数据时,需要动态传递id,那么我们可以使用 Get 请求,或拼接动态 id 来获取,在Nest  中,可以使用 @Param()装饰器,

它用于修饰方法参数,我们可以通过 params  获取请求动态id  .

两种写法:

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

标签:请求,Get,Nest,req,js,Controller,id,路由
From: https://blog.51cto.com/u_15749835/7883692

相关文章

  • .net 6.0 返回json时中文编码处理
    近期由于自己搭建.net6.0的框架在返回前台json是遇到下面这个问题,返回的json被编码了所以特此在这记录一下 编码前是这样的{"code":-1,"msg":"\u9A8C\u8BC1\u7801\u9519\u8BEF\uFF01"}处理完正常{"code":-1,"msg":"验证码错误!"}在Program中添加下面代码即可//返......
  • js 函数如何实现策略模式与状态模式
    前言有关设计模式的学习资料中,大部分都是以java语言实现的,毕竟java作为老牌面向对象的语言最能说明设计模式的核心概念,所以js的相关设计模式的学习资料也大多使用class类实现,本文记录下js使用函数实现策略模式和状态模式设计模式的方式,更有助于理解策略模式和状态模式......
  • JS实现导出Excel的五种方法详解
    <!DOCTYPEhtml><html><headlang="en"><metacharset="UTF-8"><title>html表格导出道</title><scriptlanguage="JavaScript"type="text/javascript">//第一种方法function......
  • Python爬虫:抖音 JS XB逆向解析
    哈喽兄弟们,抖音现在有JS加密,以前的方法爬不了饿了,今天来实现一下某音短视频的JS逆向解析。知识点动态数据抓包`在这里插入代码片`requests发送请求X-Bogus 参数逆向环境模块python 3.8               运行代码pycharm 2022.3           辅......
  • 2023年10月最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojs
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • JS 实现模拟键盘事件
    //获取事件需要绑定的节点varinp=document.getElementById('id')//创建初始化event事件varevent=newKeyboardEvent("keyup",{which:13,keyCode:13,key:'Enter',code:'Enter'});//执行inp.dispatchEvent(event) 参考:https://develo......
  • JS小应用
    JS访问列表内容思路:1.获取对象数组以后,以超链接显示。对应id放在链接方法的参数里。2.点击链接以后,先把id存在session里,再跳转到显示内容页面。3.在显示内容页面,读取id,之后就简单了。请求资源,显示内容。列表页面,index.html: <!DOCTYPEhtml><html><head><m......
  • 【前端开发】可视化大屏网页适配方案autofit.js
    说明:针对全屏的网页,使用autofit.js可自适应大小屏幕,原理是通过屏幕改变放大/缩小网页,并做了留白区域的兼容处理。 地址:https://github.com/huiJeck/autofit.js#autofitjs......
  • JS基础篇(一些记录)
    JS一些问题记录1.switch,break后只会退出switch本身用于防止穿透,外层比如for不会退出,ifbreak的话就会退出整个循环2.三元运算符用于比较简单的两个东西之间的比较,也不能输出打印出来,但是if双分支就可以3.同一个页面两个for,都用i不会冲突,是两个局部变量不会影响4.for里面嵌套for......
  • 【RocketMQ】RocketMQ 5.0新特性(三)- Controller模式
    在RocketMQ5.0以前,有两种集群部署模式,分别为主从模式(Master-Slave模式)和Dledger模式。主从模式主从模式中分为Master和Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件,Slave节点会......