在 Node.JS 中使用配置文件的最佳方式
Best way to use a configuration file in Node.JS
我有一个 Node.JS 应用程序的配置文件(在下面进行了简化)
module.exports = function(){
var settings = {
port: '8088'
};
settings.mysql = {
host : 'localhost',
database : 'test'
};
// Override default settings
switch(process.env.NODE_ENV){
case 'production':
settings.port = 8082;
break;
case 'staging':
settings.port = 8083;
break;
}
return settings;
};
当我启动 Express.js 应用程序时,我需要此文件进行一些基本设置:
var Config = require('./config'), settings = new Config();
var port = process.env.PORT || settings.port; // set our port
稍后我还需要在 DAO 中(在我的模型中)使用此文件中的 MySQL 设置。那时我调用配置文件(它将再次 运行 它)
var Config = require('../config'), settings = new Config();
var mysql = require('mysql');
var pool = mysql.createPool(settings.mysql);
很明显,每次我 "require" 文件都得到 运行,这看起来 lazy/inefficient。我应该将返回的 "settings" 变量存储在我的 DAO 可以看到的全局变量中,还是应该通过引用传递它?
我曾一度考虑过将其作为中间件并将其添加到请求中,但随后我需要我的路由(控制器)将其全部传递给感觉不对的 DAO(模型)。
只需导出对象本身而不是将其包装在一个函数中 - 节点模块在第一次加载后会被缓存,因此它不会再次 运行 逻辑。
var settings = {
port: '8088'
};
settings.mysql = {
host : 'localhost',
database : 'test'
};
// Override default settings
switch(process.env.NODE_ENV){
case 'production':
settings.port = 8082;
break;
case 'staging':
settings.port = 8083;
break;
}
module.exports = settings;
我有一个 Node.JS 应用程序的配置文件(在下面进行了简化)
module.exports = function(){
var settings = {
port: '8088'
};
settings.mysql = {
host : 'localhost',
database : 'test'
};
// Override default settings
switch(process.env.NODE_ENV){
case 'production':
settings.port = 8082;
break;
case 'staging':
settings.port = 8083;
break;
}
return settings;
};
当我启动 Express.js 应用程序时,我需要此文件进行一些基本设置:
var Config = require('./config'), settings = new Config();
var port = process.env.PORT || settings.port; // set our port
稍后我还需要在 DAO 中(在我的模型中)使用此文件中的 MySQL 设置。那时我调用配置文件(它将再次 运行 它)
var Config = require('../config'), settings = new Config();
var mysql = require('mysql');
var pool = mysql.createPool(settings.mysql);
很明显,每次我 "require" 文件都得到 运行,这看起来 lazy/inefficient。我应该将返回的 "settings" 变量存储在我的 DAO 可以看到的全局变量中,还是应该通过引用传递它?
我曾一度考虑过将其作为中间件并将其添加到请求中,但随后我需要我的路由(控制器)将其全部传递给感觉不对的 DAO(模型)。
只需导出对象本身而不是将其包装在一个函数中 - 节点模块在第一次加载后会被缓存,因此它不会再次 运行 逻辑。
var settings = {
port: '8088'
};
settings.mysql = {
host : 'localhost',
database : 'test'
};
// Override default settings
switch(process.env.NODE_ENV){
case 'production':
settings.port = 8082;
break;
case 'staging':
settings.port = 8083;
break;
}
module.exports = settings;