資料 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()來集中管理機密。