簡體   English   中英

解析環境變量的正確方法

[英]Proper way to parse environment variables

我基本上在我的所有項目中都使用node-config ,並且大多數時候我遇到解析設置為環境變量的布爾值和數字的問題。

例如

默認.js

module.exports = { 
    myNumber = 10,
    myBool = true
}

自定義環境變量.js

module.exports = { 
    myNumber = "MY_NUMBER",
    myBool = "MY_BOOL"
}

現在,明顯的問題是,如果我使用設置為環境變量的自定義值覆蓋默認值,它們將是字符串值而不是數字或 boolean 值。 所以現在,要確保在我的代碼中類型是正確的。 我總是必須進行類型轉換,對於布爾值,請使用適當的庫,例如yn 問題是我每次使用config.get()時都必須進行此轉換,例如+config.get("myNumber")yn(config.get("myBool"))

有沒有更好更優雅的方法來做到這一點?

我看到的一種解決方案是將類型屬性添加到環境變量中,因為它在此處使用格式完成。 這將允許做這樣的事情......

自定義環境變量.js

module.exports = { 
    myNumber = {
        name: "MY_NUMBER",
        type: "number"
    },
    myBool = {
        name: "MY_BOOL",
        type: "boolean"
    }
}

node-config將處理類型轉換,並且在獲取它時無需一直在代碼中執行此操作。 當然,需要為布爾值實現一個適當的解析器,但那些已經存在並且可以在這里使用。

默認情況下,環境變量將被解析為字符串。 在 node-config 中,我們可以使用__format覆蓋此行為,如下所示。

我們不需要任何額外的庫。 普通的 json 數據類型,如布爾值、數字、嵌套 json 等,應該可以很好地工作。

舉一個容易關聯的例子。

配置/默認.json

{
  "service": {
    "autostart": false
  }
}

自定義環境變量.json

{
  "service": {
    "autostart": {
      "__name": "AUTOSTART",
      "__format": "json"
    }
  }
}

現在我們可以在想要覆蓋時傳遞環境變量,並且基本類型不需要類型對話。

node-config v3.3.2 現在支持此功能,請參閱更改日志

我使用這種方法:

const toBoolean = (dataStr) => {
  return !!(dataStr?.toLowerCase?.() === 'true' || dataStr === true);
};

如果您也希望 0 解析為 true,則可以添加案例:

const toBoolean = (dataStr) => {
  return !!(dataStr?.toLowerCase?.() === 'true' || dataStr === true || Number.parseInt(dataStr, 10) === 0);
};

暫無
暫無

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

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