22_自定义装饰器

简介: 22_自定义装饰器

除了内置装饰器外,nest.js也允许我们自定义装饰器进行模块化功能开发,这里我们还是以SetMetadata为例子

不要忘记装饰器的本质,装饰器就是一个函数,在通过@符号调用时会往参数列表里加入一些特定的属性

  1. 创建一个自定义装饰器 nest g d roles
import { SetMetadata,ExecutionContext } from '@nestjs/common';
// 方法装饰器
export const Roles = (...args: string[]) => SetMetadata('roles', args);

创建好后可以看到这个方法,调用这个方法后会执行SetMetadata函数,定义一个路由元信息。我们在上一节注册的守卫在这一节仍然有用,不能删除

  1. 在controller里注册
import { ReqUrl, Roles } from 'src/roles/roles.decorator';
@Controller('login')
export class LoginController {
  constructor(private readonly loginService: LoginService) {}
  
  @Get()
  @Roles('admin')
  @UseGuards(RoleGuard)
  findAll() {
    return reqUrl;
  }
}

守卫内容稍作修改

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { Reflector } from '@nestjs/core';
import { Request } from 'express';
@Injectable()
export class RoleGuard implements CanActivate {
  constructor(private Reflector:Reflector){}
  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    // 反射的属性改为roles
    const admin = this.Reflector.get<string[]>('roles',context.getHandler())
    console.log('通过了守卫',admin)
    const req = context.switchToHttp().getRequest<Request>()
    if(admin.includes(req.query.roles as string)){
      return true
    }else{
      return false
    }
    console.log(admin)
    return true
  }
}

我们也可以自行创建一个属性装饰器

import { SetMetadata,ExecutionContext } from '@nestjs/common';
// 引入createParamDecorator函数
import { createParamDecorator } from '@nestjs/common';
import { Request } from 'express';
// createParamDecorator接受一个回调函数,该回调有两个参数,第一个data是我们调用装饰器时传入的参数,第二个是ExecutionContext类
export const ReqUrl = createParamDecorator((data:string,context:ExecutionContext) => {
  // 获取请求信息
    const req = context.switchToHttp().getRequest<Request>()
    console.log('自定义属性装饰器======>',data)
    return req.url
})

在controller中使用

@Controller('login')
export class LoginController {
  constructor(private readonly loginService: LoginService) {}
  @Get()
  @Roles('admin')
  @UseGuards(RoleGuard)
    // 使用装饰器并传入参数
  findAll(@ReqUrl('哈哈哈') reqUrl) {
    return reqUrl;
  }
}

以上,当我们访问localhost:3000/login时控制台就会输出'哈哈哈'并在页面上返回请求的url信息

目录
相关文章
|
4月前
|
监控 算法 5G
室内外融合定位技术从核心架构、技术原理到部署实施流程等详解(二)
本文详解室内外融合定位系统核心技术,涵盖北斗RTK厘米级定位、UWB高精度测距、场景自适应切换与多源数据融合四大模块。通过终端-网络-平台三层架构,实现室外高精度、室内无缝衔接的连续定位,支持化工、矿山等高危场景下的精准管控与安防联动,解决“进车间失联”难题。如果您想进一步了解室内外融合定位技术的案例,欢迎搜索维构lbs智能定位~
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【每天了解一个AI证书】CAIE认证大纲设计解析(2026年)
2026年AI人才供需比仅为0.5,平均两个岗位争夺一位候选人,AI证书已成为职场竞争力的重要背书。但市场认证种类繁杂,部分认证存在知识体系碎片化、绑定单一厂商生态等问题,让求职者难以抉择。CAIE(注册人工智能工程师)作为覆盖基础到进阶的系统化认证,其2026年大纲以通用型知识架构和阶梯式能力培养为核心,本文从设计逻辑、等级差异、适配场景及备考路径展开分析,为不同需求者提供理性选择依据。
|
4月前
|
弹性计算 调度 vr&ar
实时云渲染与云桌面解析(一):图形计算架构的技术对比
GPU虚拟化技术面临云桌面成本上涨和性能瓶颈问题,而实时云渲染技术通过云端渲染和低延迟传输提供更优解决方案。相比系统级虚拟化的云桌面,应用级云渲染如LarkXR平台支持动态资源分配和弹性伸缩,在性能、成本、部署灵活性等方面更具优势。实时云渲染技术正快速发展,特别适合元宇宙、数字孪生等高实时性场景,可显著降低企业图形计算成本并提升用户体验。平行云的LarkXR平台已实现规模化应用,提供企业级云渲染解决方案。
|
4月前
|
自然语言处理 算法 数据可视化
DeepInsight x ChatBI:“智能歧义识别+知识沉淀”,化解模糊查询
本文针对自然语言数据分析中的语义歧义问题,提出“智能澄清-知识沉淀-动态召回”闭环方案,通过精准识别、最少提问、结构化留存用户意图,实现一次澄清、长期复用,显著提升查询效率与体验一致性。
|
数据采集 SQL 人工智能
告别数据混乱:瓴羊Dataphin 通过AI+标准让企业数据“活”起来 | 【瓴羊数据荟】数据MeetUp第四期
AI技术的快速发展促使企业重新审视数据治理的重要性。当前,企业在数据治理中常因指标口径不统一、数据血缘不透明等问题陷入困境。阿里云智能集团瓴羊高级技术专家周鑫提出,以数据标准为核心贯穿数据全生命周期,可有效解决治理难题。
724 15
告别数据混乱:瓴羊Dataphin 通过AI+标准让企业数据“活”起来 | 【瓴羊数据荟】数据MeetUp第四期
|
机器学习/深度学习 人工智能 并行计算
量子计算机揭秘:从结构到工作原理的深入探索
量子计算机揭秘:从结构到工作原理的深入探索
403 23
|
监控 应用服务中间件 Apache
不同服务器环境301重定向具体实施步骤
本文详细介绍301重定向配置方法,涵盖Apache、Nginx、IIS服务器环境及WordPress、Cloudflare等平台工具的实现方式。提供具体规则示例与操作步骤,包括单页、整站和批量路径重定向。同时,强调验证与监控的重要性,列出测试清单及搜索引擎通知方法,并针对常见问题如重定向循环、参数丢失等提供解决方案。最后总结最佳实践原则,确保SEO权重传递与用户体验优化。
660 17
|
监控 网络协议 Linux
状态监控与流量分析
本内容介绍了常用的网络状态信息显示与监控工具及其功能。包括`ifconfig`和`ip`用于配置和查看网络接口参数;`netstat`与`ss`用于显示网络连接和套接字信息;以及多种实时流量监控工具,如`iftop`、`nload`、`vnstat`和`bmon`,它们可分别用于带宽使用情况、历史流量统计及多窗口界面下的详细流量分析。这些工具为网络诊断和性能优化提供了重要支持。
329 3
|
存储 SQL Docker
ClickHouse入门指南:快速搭建与使用
【10月更文挑战第26天】在大数据时代,如何高效地处理海量数据成为了许多企业和开发者的关注点。ClickHouse 是一个开源的列式数据库管理系统(Column-Oriented DBMS),以其出色的查询性能和高并发能力,在数据分析领域迅速崛起。本文将从一个初学者的角度出发,详细介绍如何快速上手 ClickHouse,涵盖从环境搭建到基础操作的全过程。
2000 3

热门文章

最新文章

下一篇
开通oss服务