【问题标题】:How to use environment variables in ClientsModule?如何在 ClientsModule 中使用环境变量?
【发布时间】:2021-08-30 14:26:00
【问题描述】:

我正在尝试在 ClientsModule 中使用环境变量:

import { Module } from '@nestjs/common';
import { ClientsModule, Transport } from '@nestjs/microservices';

@Module({
  imports: [
    TypeOrmModule.forFeature([Process]),
    ClientsModule.register([
      {
        name: 'PROCESS_SERVICE',
        transport: Transport.RMQ,
        options: {
          queue: process.env.RMQ_PRODUCER_QUEUE_NAME,
          urls: [process.env.RMQ_PRODUCER_URL],
          queueOptions: { durable: true },
        },
      },
    ]),

我也试过这个:


import { Module } from '@nestjs/common';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { ConfigService } from '@nestjs/config';

const configService = new ConfigService();
const rmqProcessUrl = configService.get<string>('RMQ_PRODUCER_URL');
const rmqProcessQueue = configService.get<string>('RMQ_PRODUCER_QUEUE');

@Module({
  imports: [
    TypeOrmModule.forFeature([Process]),
    ClientsModule.register([
      {
        name: 'PROCESSES_SERVICE',
        transport: Transport.RMQ,
        options: {
          queue: rmqProcessQueue,
          urls: [rmqProcessUrl],
          queueOptions: { durable: true },
        },
      },
    ]),

但在这两种情况下都会出现以下错误:

TypeError:元类型不是构造函数

当我直接使用这些值时,它会按预期工作。我也尝试过导入和使用

export const rmqServiceName = process.env.RMQ_PRODUCER_QUEUE_NAME

export const rmqServiceName = process.env.RMQ_PRODUCER_URL

但这也会导致同样的错误。

那么我怎样才能访问@ClientsModule 中的.env 变量呢? 有没有我遗漏的解决方法?

【问题讨论】:

标签: nestjs nestjs-config


【解决方案1】:

我发现了问题所在,以防有人遇到和我一样的问题。

应该做的是在app.module.ts中导入nestjs/configConfigModule,并使用ClientsModule.registerasync方法。

app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),

在我正在处理的模块中:

import { Module } from '@nestjs/common';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    TypeOrmModule.forFeature([Process]),
    ClientsModule.registerAsync([
      {
        name: 'PROCESSES_SERVICE',
        imports: [ConfigModule],
        useFactory: async (configService: ConfigService) => ({
          transport: Transport.RMQ,
          options: {
            queue: configService.get<string>('RMQ_PRODUCER_QUEUE'),
            urls: [configService.get<string>('RMQ_PRODUCER_URL')],
            queueOptions: { durable: configService.get<boolean>('RMQ_PRODUCER_QUEUE_DURABLE') },
          },
        }),
        inject: [ConfigService],
      },
    ]),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2021-11-17
    • 2016-04-11
    • 2014-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多