数据 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 |
|---|---|
| OS/进程环境 | 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)由使用方的配置或运行时逻辑处理。
Troubleshooting
| 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 包含机密的文件。 |
快速参考
| Item | 概要 |
|---|---|
| Syntax | @env('variable-name') |
| 模拟文件 |
.env 带有 name=value 行 |
混合 @env() |
支持. |
Review
使用 @env() 将机密和环境特定的值排除在配置文件之外。 将其与规则机密管理(例如 CI/CD 变量存储或容器定义)配对,以便进行安全灵活的部署。 对于企业保管库,请结合@akv()功能整合机密。