nest 自定义装饰器
比如我们需要获取用户信息
创建装饰器文件
在根目录新建custom.decorator.ts
在文件中写入:
import {SetMetadata} from '@nestjs/common'
export const UserInfo = createParamDecorator(
(data: string, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest<Request>();
if (request.user === null) {
return null;
}
return data ? request.user[data] : request.user;
},
);
在其他文件中使用
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { RequireLogin, RequirePermission, UserInfo } from './custom.decorator';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get('aaa')
@RequireLogin()
@RequirePermission('ddd')
aaa(@UserInfo('username') username: string) {
return username;
}
@Get('bbb')
bbb() {
return 'bbb';
}
}
我们访问 aaa 接口,然后就可以获取 username,当然前提是登录之后请求上已经有 user 这个对象了。