NestJS 自定义装饰器

100 阅读1分钟

自定义路由装饰器

Nest 是围绕一种称为 decorators 的语言特性构建的。 装饰器是许多常用编程语言中的一个众所周知的概念,但在 JavaScript 世界中,它们仍然相对较新。

参数装饰器

Nest 提供了一组有用的 参数装饰器,你可以将它们与 HTTP 路由处理程序一起使用。 下面是提供的装饰器和它们代表的普通 Express(或 Fastify)对象的列表

@Request(), @Req()req
@Response(), @Res()res
@Next()next
@Session()req.session
@Param(param?: string)req.params / req.params[param]
@Body(param?: string)req.body / req.body[param]
@Query(param?: string)req.query / req.query[param]
@Headers(param?: string)req.headers / req.headers[param]
@Ip()req.ip
@HostParam()req.hosts

可以创建自己的 自定义装饰器

nest g d role

主要采用createParamDecorator 从@nestjs/common导入

role.decorator.ts

import { SetMetadata, createParamDecorator,ExecutionContext} from '@nestjs/common';
import { Request } from 'express'


export const Role = (...args: string[]) => SetMetadata('role', args);


export const ReqUrl = createParamDecorator((data:unknown,ctx:ExecutionContext)=>{
    console.log("data",data)
    const req = ctx.switchToHttp().getRequest<Request>()
    return req.path
})

使用

  @Get('custom')
  customDec(@ReqUrl(["你好"]) url){
    console.log("controller",url)
  }

打印

image.png