[英]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.