共用方式為


使用 @env() 來替代資料 API 產生器中的環境變數

資料 API 產生器(DAB)可讓您在載入時以取代值的方式,將秘密(例如資料庫連接字串)排除在dab-config.json之外。 第一個支援的機制是 @env() 函數,它從主機處理程序環境或本端 .env 檔案解析環境變數。

另請參閱: the @akv() function

什麼@env()做

在任意需要字串值的地方引用環境變數:

{
  "data-source": {
    "connection-string": "@env('SQL_CONN_STRING')"
  }
}

在配置載入時,DAB 會掃描字串中的 @env('VAR_NAME') 模式,並將該記號替換為環境變數 VAR_NAME 的值。

價值觀的來源

來源 Description
作業系統/製程環境 DAB 程序啟動時出現的標準環境變數。
.env 檔案 配置目錄中包含行的 NAME=VALUE 純文字檔案(為了本機開發方便)。

備註

當兩者定義相同的名稱時,檔案 .env 會覆寫現有的處理程序/系統環境變數。 如果您提供本地 .env 檔案進行開發,則其條目會用來滿足 @env('var-name')查詢而無需呼叫本地環境。

範例 .env 檔案:

SQL_CONN_STRING=Server=localhost;Database=AppDb;User Id=app;Password=local-dev;
DB_TYPE=mssql
JOB_API_KEY=dev-job-key

指引:

  • .env 保持在 dab-config.json 的旁邊(或在您的啟動過程需要的位置)。
  • .env 加入 .gitignore
  • 空白行和以開頭的 # 行 (如果支援,請驗證) 通常會被忽略;在記錄註解支援之前先確認。
  • 在 Linux/macOS 上,名稱區分大小寫。 在 Windows 上,它們實際上不區分大小寫。

@env()在配置中使用

基本替換

{
  "data-source": {
    "database-type": "@env('DB_TYPE')",
    "connection-string": "@env('SQL_CONN_STRING')"
  }
}

結合 @akv()

{
  "data-source": {
    "database-type": "@env('DB_TYPE')",
    "connection-string": "@akv('prod-sql-connection')"
  }
}

預存程序參數

{
  "entities": {
    "RunJob": {
      "source": {
        "object": "dbo.RunJob",
        "type": "stored-procedure",
        "parameters": {
          "intParam": "@env('SP_PARAM1_INT')",
          "boolParam": "@env('SP_PARAM2_BOOL')"
        }
      },
      "permissions": [
        { "role": "anonymous", "actions": [ "execute" ] }
      ]
    }
  }
}

環境值會取代為字串。 後續剖析 (例如,至 int 或 bool) 是由取用組態或執行時期邏輯所處理。

故障排除

Scenario 結果
找到變數 替換成功。
變數不存在 可能的組態載入失敗。
找不到變數 替換為空字符串。
不同屬性的多個@env() 所有這些都是獨立解決的。
用於需要數字或布林值的情況下 值替換為字串;解析可能會成功。
無效的模式 (例如 @env(DB_VAR) ,缺少引號) 被視為文字字串。

完整範例

dab-config.json

{
  "data-source": {
    "database-type": "@env('DB_TYPE')",
    "connection-string": "@env('SQL_CONN_STRING')"
  },
  "runtime": {
    "rest": { "enabled": true }
  },
  "entities": {
    "Books": {
      "source": "dbo.Books",
      "permissions": [
        { "role": "anonymous", "actions": [ "read" ] }
      ]
    }
  }
}

.env

DB_TYPE=mssql
SQL_CONN_STRING=Server=localhost;Database=BooksDb;User Id=app;Password=StrongPassword!;

這很重要

切勿提交 .env 包含機密的檔案。 |

快速參考

項目 總結
語法 @env('variable-name')
模擬檔案 .env有線條name=value
混合 @env() 支援。

Review

@env() 來將秘密和環境特定值排除在組態檔之外。 將其與嚴格的秘密管理(例如 CI/CD 變數儲存或容器定義)配對,以實現安全且靈活的部署。 對於企業儲存庫的使用,請結合功能@akv()來集中管理機密。