【问题标题】:Get Environment Variable with JOI使用 JOI 获取环境变量
【发布时间】:2025-12-25 18:00:09
【问题描述】:

我正在使用joi 来构造数据。
现在我无法读取启动时设置的环境变量。

我有一个启动 scrip.sh,例如:

PUBLIC_KEY="$(cat public_key.pem) docker-compose up --build"

然后我尝试读取 PUBLIC_KEY 变量。

const envVariables = joi.object({
 PUBLIC_KEY: joi.string()
    .default('PUBLIC_KEY')
})

我认为这会自动识别变量,但事实并非如此。
是否可以在 Joi 启动时设置变量?

【问题讨论】:

    标签: javascript node.js environment-variables joi


    【解决方案1】:

    您可以使用process 核心模块获取环境变量。来自documentation

    Node.js 的进程核心模块提供了 env 属性 托管当时设置的所有环境变量 进程已启动。

    例如,

    const pubKey = process.env.PUBLIC_KEY
    

    【讨论】:

    • 我是否正确初始化了environment variable?因为我无法以任何我尝试的方式得到它,即使你的回答(它返回undefined)。
    • 不(对不起,我错过了),我认为您要做的是在运行 node app.js 的容器中设置 PUBLIC_KEY=$(cat public_key.pem)
    【解决方案2】:
    1. Joi 提供变量,至少以您想要的方式
    2. 如果它由 CLI 参数提供,则从 process 使用它,或者另外使用 dotenv.config().env 文件同步读取
    3. 如果您需要在 Joi 模式逻辑中读取一些先前的值,例如对于某些情况,你可以试试这个例子
    var schema = {
        a: Joi.string(),
        b: Joi.string(),
        c: Joi.string().when('a', { is: 'avalue', then: Joi.string().required() }).concat(Joi.string().when('b', { is: 'bvalue', then: Joi.string().required() }))
    };
    

    【讨论】: