自定义路由装饰器
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)
}
打印