在Node.Js/Express应用程序中存储数据库配置的最佳方式

Dmi*_*kin 60 javascript config node.js express

在node.js/Express上运行的开源应用程序中存储数据库配置(用户名,密码)的最佳方法是什么?两个具体问题:

  1. 例如,我应该将它放在文件/lib夹中的单独config.js文件中,并且永远不要将它包含在GitHub上公开可用的主存储库中吗?

  2. 要包含配置,是require('./config.js')从需要它的文件那么简单还是有更好的方法呢?

PS对不起,如果问题看起来有点简单或没有这么好的表述,但我刚开始:)

Ste*_*ght 91

我是这样做的:

创建一个config.js,其中包含代表您的配置的对象:

var config = {
development: {
    //url to be used in link generation
    url: 'http://my.site.com',
    //mongodb connection settings
    database: {
        host:   '127.0.0.1',
        port:   '27017',
        db:     'site_dev'
    },
    //server details
    server: {
        host: '127.0.0.1',
        port: '3422'
    }
},
production: {
    //url to be used in link generation
    url: 'http://my.site.com',
    //mongodb connection settings
    database: {
        host: '127.0.0.1',
        port: '27017',
        db:     'site'
    },
    //server details
    server: {
        host:   '127.0.0.1',
        port:   '3421'
    }
}
};
module.exports = config;
Run Code Online (Sandbox Code Playgroud)

然后在我的index.js(或任何地方),

var env = process.env.NODE_ENV || 'development';
var config = require('./config')[env];
Run Code Online (Sandbox Code Playgroud)

然后用该对象处理,例如

var server = express();
server.listen(config.server.port);
...
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢在一个文件中提供多个配置的想法,但开发配置和生产配置不能很好地混合:它们不应该存储在同一个文件中。您不希望将生产数据库密码存储在您的开发计算机上,这太疯狂了!另外:切勿将此配置文件提交给版本控制。 (6认同)

anv*_*rik 21

不确定这是否是最佳做法,但我个人有一个config.json文件,我存储我的数据库连接信息.然后我做以下事情:

// options.js
var fs = require('fs'),
configPath = './config.json';
var parsed = JSON.parse(fs.readFileSync(configPath, 'UTF-8'));
exports.storageConfig=  parsed;
Run Code Online (Sandbox Code Playgroud)

然后从另一个文件中执行以下操作:

var options = require('./options');

var loginData = {
        host: options.storageConfig.HOST,
        user: options.storageConfig.user,
        password: options.storageConfig.password
};
Run Code Online (Sandbox Code Playgroud)

  • 在服务器上包含秘密凭据的文件不是大问题吗?如果是这样,那么此答案无济于事,我们还应该怎么办?有人说我们应该使用环境变量-但有人认为它们也很危险,因为服务器上的任何程序都可以读取它们。 (3认同)

小智 18

对于运行我需要隐藏数据库凭据的玩具应用程序,我使用dotenv模块.

将您的敏感信息放在.env文件(.gitignored)中,放在require('dotenv').config();您的应用中; dotenv创建process.env您可以参考的条目.

.env 文件:

DATABASE_PASSWORD=mypw
DATABASE_NAME=some_db
Run Code Online (Sandbox Code Playgroud)

要引用这些值:

process.env.DATABASE_PASSWORD
Run Code Online (Sandbox Code Playgroud)