首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在nconf中读取Heroku的嵌套process.env vars /对象?

如何在nconf中读取Heroku的嵌套process.env vars /对象?
EN

Stack Overflow用户
提问于 2017-08-01 09:53:31
回答 1查看 957关注 0票数 1

我正在尝试将Ghost 1.2.0部署到Heroku。在Ghost的早期版本(<= 0.11.x)中,它们使用了一个config.js文件,您只需这样做:

代码语言:javascript
复制
database: {  
    client: 'postgres',
    connection: {
        host: process.env.POSTGRES_HOST,
        user: process.env.POSTGRES_USER,
        password: process.env.POSTGRES_PASSWORD,
        database: process.env.POSTGRES_DATABASE,
        port: process.env.POSTGRES_PORT
    },
    debug: false
}, …

但是在这个版本中,他们使用的是nconf,它将这个config.js替换为与环境相关的JSON文件,比如config.production.json

与JS对象不同的是,JSON文件不能将vars作为值。我可以将我的凭据硬编码到JSON文件中,但我不想这样做,因为:

  1. 在我看来是个糟糕的练习,而且
  2. Heroku定期旋转凭据,并更新附加此数据库的应用程序。(引用自Heroku)

在深入研究了nconf 自述文件问题之后,我了解到可以通过以下方式来模仿这个预期的database对象:

代码语言:javascript
复制
nconf.env({                                                                                                            
    separator: '__' // Two dashes
});

并将vars定义为:

代码语言:javascript
复制
heroku config:set DATABASE__CLIENT=postgres
heroku config:set DATABASE__CONNECTION__HOST=<value>
...

但是,无论如何,当我稍后打电话给undefined时,我会得到以下消息:

代码语言:javascript
复制
nconf.get('database');
nconf.get('DATABASE'); // In case it was case-sensitive...

相反,如果我打电话:

代码语言:javascript
复制
nconf.get('DATABASE__CLIENT'); // postgres

它起作用了。我可以尝试(而且我会)修改Ghost脚本,以以这种方式读取所有变量,但是只要它期望有一个database对象,那么让它以正确的方式工作是很酷的。

那么,有没有人知道如何用Heroku的env正确地重新创建一个对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 16:10:31

我终于找到解决办法了。

除非您想修改nconf.env(settings),例如:

代码语言:javascript
复制
nconf.env({                                                                                                            
    separator: '__', // Two dashes
    lowerCase: true
});

这将使将lowerCase: true传递给env()成为可能,这样如果环境变量被称为某样东西或SOMEthing,那么它也可以使用某些东西[来源]获得。

我建议使用已经用小写的env。

所以,

代码语言:javascript
复制
heroku config:set database__client=postgres

将使用以下方法读取:

代码语言:javascript
复制
nconf.get('database:client');

看起来nconf有一个不同的字符分隔符来定义名为separator的嵌套变量,另一个用来读取它们的字符分隔符称为logicalSeparator (默认值是:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45434620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档