You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS中将命令行传入的Token传递给AppService?

将命令行Token传递给AppService的几种方法

方法一:使用自定义注入令牌(依赖注入规范方式)

步骤1:定义注入令牌

在项目中创建一个常量文件(比如constants.ts),或者直接在模块文件中定义:

export const TOKEN_KEY = Symbol('COMMAND_LINE_TOKEN');

步骤2:动态注册令牌提供者

修改bootstrap函数,在创建应用后动态注册令牌对应的提供者:

async function bootstrap() {
  const token = process.argv[2]; // 修正原代码多余的右括号
  const app = await NestFactory.create(AppModule, { logger: ['debug', 'verbose'] });
  
  // 为AppModule注册令牌提供者
  app.select(AppModule).provide(TOKEN_KEY, { useValue: token });
  
  app.useGlobalGuards(new AuthGuard()); // 修正原代码缺少的构造函数括号
  await app.listen(3000);
}
bootstrap();

步骤3:在AppService中注入令牌

修改AppService,通过@Inject()装饰器注入令牌对应的值:

import { Injectable, Inject } from '@nestjs/common';
import { TOKEN_KEY } from './constants'; // 引入定义的令牌

@Injectable()
export class AppService {
  constructor(
    @Inject(TOKEN_KEY) private readonly token: string
  ) {}

  getValue(): string {
    return this.token;
  }
}

方法二:直接获取实例赋值(快速实现方式)

如果不需要严格遵循依赖注入规范,可以直接在bootstrap中获取AppService实例,手动设置token属性:

修改bootstrap函数

async function bootstrap() {
  const token = process.argv[2]; // 修正原代码多余的右括号
  const app = await NestFactory.create(AppModule, { logger: ['debug', 'verbose'] });
  
  // 获取AppService实例并赋值token
  const appService = app.get(AppService);
  appService.token = token;
  
  app.useGlobalGuards(new AuthGuard()); // 修正原代码缺少的构造函数括号
  await app.listen(3000);
}
bootstrap();

修改AppService

@Injectable()
export class AppService {
  token: string; // 声明token属性

  getValue(): string {
    return this.token;
  }
}

注意事项

  • 原代码中process.argv[2]);多了一个右括号,new AuthGuard少了构造函数括号,以上示例已修正。
  • 如果你的AuthGuard也需要使用这个token,可以用同样的注入方式传递。

内容的提问来源于stack exchange,提问作者enigmatic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:17:29