簡體   English   中英

.env 文件中的 nestjs 變量問題

[英]nestjs issue with variable in .env file

我使用 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 正在逃避額外的\\ 這是轉義當打印發生,所以它看起來正確的(即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使用的。你可以在cat下面看到(print) 文件,以及使用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

你必須實現配置模塊。

從...開始

npm i --save @nestjs/config

然后在你的 appModule 中添加 configModule:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM