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

时间:2014-03-12 10:33:15

标签: javascript node.js express config

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

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

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

  3. 对不起,如果问题看起来有点简单或者没有那么好,那我就开始了:))

6 个答案:

答案 0 :(得分:87)

以下是我的表现方式:

创建一个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;

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

var env = process.env.NODE_ENV || 'development';
var config = require('./config')[env];

然后使用该对象进行处理,例如

var server = express();
server.listen(config.server.port);
...

答案 1 :(得分:21)

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

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

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

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

var loginData = {
        host: options.storageConfig.HOST,
        user: options.storageConfig.user,
        password: options.storageConfig.password
};

答案 2 :(得分:15)

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

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

.env档案:

DATABASE_PASSWORD=mypw
DATABASE_NAME=some_db

参考值:

process.env.DATABASE_PASSWORD

答案 3 :(得分:3)

我确实放了args。就像这么多node.js例子的端口一样。 你最有可能永远,pm2,nodemon来运行你的应用程序。因此,此变量不会作为源代码的一部分签入。它们也是全球可用的。

process.env.PORT
process.env.DATABASE_USER
process.env.DATABASE_PASSWORD


PORT=3000 DATABASE_HOST=localhost DATABASE_USER=admin DATABASE_PASSWORD=mypassword node app.js

export PORT=3000
export DATABASE_HOST=localhost
export DATABASE_PORT=27017
export DATABASE_USER=admin
export DATABASE_PASSWORD=mypassword
node app.js

var server = app.listen(process.env.PORT, function() {
});

var mongoClient = new MongoClient(new Server(process.env.DATABASE_HOST, process.env.DATABASE_PORT));

答案 4 :(得分:1)

  

要包含配置,是否需要来自需要它的文件中的require('./ config.js')这么简单,还是有更好的方法呢?

这是存储配置文件的正确方法。

最好的方法是将整个应用程序编写为普通的node.js模块,并编写一个调用它的小型启动文件。这个想法还允许您使用依赖注入来使用不同的数据库驱动程序。

良好但不完美的解决方案是环境。它在所有应用程序之间共享,因此如果您希望所有数据都可以使用某些数据,那么这是最好的选择。但是如果你有一个特定应用程序的配置,那就不那么多了。

PS:请不要使用JSON。这是最糟糕的想法。 :)

答案 5 :(得分:1)

我发现这是处理我的配置的好方法,考虑到不同的环境:

config.coffee

exports.setEnvironment = (env) ->
    switch env
        when "development"
            exports.DEBUG_LOG = true
            exports.DB_PORT = '27017'
            # ...
        when "testing"
            exports.DEBUG_ERROR = true
            exports.DEBUG_CLIENT = true
            # ...
        when "production"
            exports.DEBUG_LOG = false
            # ...
        else console.log "environment #{env} not found"

server.coffee:

config = require('./config')
config.setEnvironment env