Nest.js 在请求对象中使用自定义值

man*_*tra 1 javascript node.js nestjs

我创建了一个像这样的守卫

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { AuthService } from './auth.service';

@Injectable()
export class CompanyGuard implements CanActivate {
  constructor(private readonly authService: AuthService) {}

  async canActivate(context: ExecutionContext): Promise<boolean> {
    const request = context.switchToHttp().getRequest();
    const token = request.headers['token'];
    if (token) {
      const company = await this.authService.validateToken(token);
      return company ? true : false;
    } else {
      return false;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想将 Company 的值保留在请求对象上,以便稍后可以在控制器上使用它。如何在 Nest.js 中做到这一点?我试图在文档中查看它,但我很困惑。我应该使用会话还是有更简单的方法来做到这一点?

Jay*_*iel 8

company您只需将其添加到请求的自定义字段即可。request.company = company然后在控制器中您可以用来@Req()获取请求对象并.company获取公司值。或者您可以创建一个自定义装饰器来为您找到该公司。

  • 您还没有使用“Request”吗?重构命令应该能够解决这个问题。是的,您可以使用一些[声明合并](https://www.typescriptlang.org/docs/handbook/declaration-merging.html)来处理它,但这并不总是适合测试。我更愿意使用自定义界面来明确事物的来源。 (2认同)