Nest.js问题与.env文件中的变量

问题描述

我使用nestJS框架构建rest api,但在获取环境变量时遇到问题。

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

环境变量是这样的:

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很有可能正在转义多余的@bot.event async def on_command_error(ctx,error): if isinstance(error,commands.CommandOnCooldown): if error.retry_after>3600: .... else: .... else: Stuff the bot should do on a different error come here 。打印时不会转义,因此看起来正确(即\将打印console.log(process.env.SMB_SHARE),但实际上变量现在为\\\\10.0.0.0\\some_path)。我最终使用名为\\\\\\\\10.0.0.0\\\\some_path的文本文件创建了一个模拟,并使用了Node中的./temp/.env模块(fs使用的是dotenv您可以在文件@nestjs/config(打印)的下方看到,以及使用cat读取文件时的两种不同方法

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

,

您必须实现config模块。

开始

npm i-保存@ nestjs / config

然后在您的appModule中添加configModule:

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

@Module({
  imports: [ConfigModule.forRoot()],})
 export class AppModule {}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...