如何在 Node 的变量定义中正确调用多个环境变量

How to properly call multiple environment variables within a variable definition in Node

我在本地 local.env.js 文件中保存了两个环境变量。我想用它们代替以下代码中的用户名和密码:

var admins = {
  'frank': { password: 'mypassword' },
   };

当我使用下面的代码时,出现错误 (Unexpected token .):

var admins = {
    process.env.BASIC_AUTH_USER: {password: process.env.BASIC_AUTH_PASSWORD},
    };

关于如何正确执行此操作的任何建议?

您可以使用 array-like-notation,像这样:

var admins = {};

admins[process.env.BASIC_AUTH_USER] = {
    password: process.env.BASIC_AUTH_PASSWORD
};

如果 BASIC_AUTH_USER"Frank" 并且 BASIC_AUTH_PASSWORD 是 "potatosalad" 那么你最终会得到这样一个对象:

admins: {
    Frank: {
        password: 'potatosalad'
    }
}

试试这个 admins = {}; admins[process.env.BASIC_AUTH_USER] = {password: process.env.BASIC_AUTH_PASSWORD};

在 ES5 及更早版本中,静态对象声明不能使用 "computed" 值作为 属性 名称 - 它必须是字符串文字。因此,您必须使用实际的代码行来使用 obj[computedPropName] = value; 语法分配 属性。在您的特定情况下,它看起来像这样:

var admins = {};
admins[process.env.BASIC_AUTH_USER] = {password: process.env.BASIC_AUTH_PASSWORD};

在 ES6 中,如果将计算值包含在数组语法中,则可以在静态声明中使用它,如下所示:

var admins = {[process.env.BASIC_AUTH_USER]: {password: process.env.BASIC_AUTH_PASSWORD}};

有关此功能的更多说明,请参阅 this description of new ES6 features and this MDN reference

部分最新版本的浏览器、node.js 等运行时环境中提供了 ES6 的部分内容,当然,您可以使用转译器在 ES6 中编写代码,但转译为 ES5 兼容代码对于许多特征。当然,我们距离能够依赖本机 ES6 支持一般的跨浏览器使用还有一段距离(因此现在对转译器感兴趣)。