Node.js Nest.js全局防护

Node.js Nest.js全局防护,node.js,dependency-injection,global,guard,Node.js,Dependency Injection,Global,Guard,我是nest.js的新手,我有一个问题。 我有一个像这样的后卫 import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; import { Observable } from 'rxjs'; import { Reflector } from '@nestjs/core'; @Injectable() export class RolesGuard implements CanActivate {

我是nest.js的新手,我有一个问题。 我有一个像这样的后卫

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { Reflector } from '@nestjs/core';

@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private readonly reflector: Reflector) {
  }

  canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
    const roles = this.reflector.get<string[]>('roles', context.getHandler());
    if (!roles) {
      return true;
    }
    const request = context.switchToHttp().getRequest();
    const user = request.user;
    return user.role.some(role => !!roles.find(item => item === role));
  }

}
app.useGlobalGuards(new RolesGuard())
但是它说,我需要将参数(反射器)传递给警卫,正如我在构造函数中提到的,现在可以这样初始化反射器了吗

const reflector:Reflector = new Reflector();
app.useGlobalGuards(new RolesGuard(reflector))
还是有更好的方法

  app.useGlobalGuards(new RolesGuard(new Reflector()));

它也在起作用。找不到更好的解决方案。

虽然我的答案可能没有多大价值,但我只想重复一下,这是获取反射器的预期方法,这是NestJS创建者的一句话

kamilmysliwiec

手动创建实例时,可以通过 你自己:


新RoleGuard(新反射器());
资料来源: