在node.js / Express上运行的开源应用程序中存储数据库配置(用户名,密码)的最佳方法是什么?两个具体问题:
例如,我应该将它放在/lib
文件夹中的单独的config.js文件中,并且永远不要将它包含在GitHub上公开可用的主存储库中吗?
要包含配置,它是否需要来自需要它的文件中的require('./config.js')
那么简单,还是有更好的方法呢?
对不起,如果问题看起来有点简单或者没有那么好,那我就开始了:))
答案 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