【问题标题】:nestjs issue with variable in .env file.env 文件中的变量的 nestjs 问题
【发布时间】:2021-02-11 23:16:28
【问题描述】:

我正在使用 NestJS 框架构建一个 rest api,我在获取环境变量时遇到了问题。

我有一个带有路径字符串变量“SMB_SHARE”的 .env,当我将此变量传递给 smb2 库的类构造函数时,这会引发错误,环境变量提供的字符串无效。

环境变量是这样的:

SMB_SHARE=\\10.00.0.000\some_path

当我在代码中使用控制台登录时,变量没问题,是一个字符串并且具有正确的字符串值。但是当我将它传递给构造函数时,它会抛出错误。

我将字符串直接传递给构造函数,它工作正常,构造函数的其他环境变量设置正确(如用户名和密码)。只有 SMB_SHARE 变量会引发错误。

我不知道这里有什么问题。有人可以帮我解决这个问题吗?

我举几个例子:

constructor(private config: ConfigService) {
    console.log('VAR', config.get<string>('SMB_SHARE'));
    //This show the correctly string variable value

    const share = config.get<string>('SMB_SHARE');

    this.sambaClient = new SMB2({
      share: '\\\\10.00.0.000\\some_path', //WORK
      //share: share, FAIL
      //share: config.get<string>('SMB_SHARE'), FAIL
      //share: process.env.SMB_SHARE, FAIL
      domain: '',
      username: config.get<string>('SMB_USERNAME'),
      password: config.get<string>('SMB_PASSWORD'),
      debug: true,
      autoCloseTimeout: 0,
    })
}

.env 文件是这样的:

SMB_SHARE=\\\\10.00.0.000\\some_path
SMB_USERNAME=user
SMB_PASSWORD=secret

【问题讨论】:

    标签: javascript environment-variables nestjs dotenv nestjs-config


    【解决方案1】:

    很可能,正在发生的事情是 JavaScript 正在转义额外的 \。当打印发生时,这是未转义的,所以它看起来正确(即console.log(process.env.SMB_SHARE) 将打印\\\\10.0.0.0\\some_path,但实际上,变量现在是\\\\\\\\10.0.0.0\\\\some_path)。我最终使用名为./temp/.env 的文本文件创建了一个模拟,并使用了来自Node 的fs 模块(这是dotenv 使用的,这是@nestjs/config 使用的。你可以在下面看到@ 987654329@(打印)文件,以及使用node读取文件时的两种不同方法

    ~/Documents/code                                                               
    ▶ cat ./temp/.env
    HOST=\\\\127.0.0.1:3000\\path
    
    
    ~/Documents/code                                                               
    ▶ node
    Welcome to Node.js v12.18.2.
    Type ".help" for more information.
    > const { readFileSync } = require('fs');
    undefined
    > readFileSync('./temp/.env').toString()
    'HOST=\\\\\\\\127.0.0.1:3000\\\\path\n\n'
    > console.log(readFileSync('./temp/.env').toString())
    HOST=\\\\127.0.0.1:3000\\path
    

    这里的解决方案是将您的.env 文件更改为您想要传递给配置的确切字符串(可能是\\10.0.0.0\some_path

    【讨论】:

      【解决方案2】:

      你必须实现配置模块。

      开始

      npm i --save @nestjs/config

      然后在你的 appModule 中添加 configModule:

      import { ConfigModule } from '@nestjs/config';
      
      @Module({
        imports: [ConfigModule.forRoot()],
       })
       export class AppModule {}
      

      【讨论】:

      • OP 已经提到他们能够使用 Nest 的ConfigService 读取环境变量。这似乎更多是.env文件的配置问题
      猜你喜欢
      • 1970-01-01
      • 2021-08-12
      • 2022-01-25
      • 2021-01-03
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2020-09-02
      相关资源
      最近更新 更多