在Node.JS

时间:2016-02-05 09:23:10

标签: javascript mysql node.js node-mysql

我有一个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);

显然,每当我“要求”文件运行时,这看起来似乎是懒惰/低效的。我应该将返回的“设置”变量存储在我的DAO可以看到的全局变量中,还是应该通过引用传递它?

我曾经考虑过制作中间件并将其添加到REQUEST但是我需要将路径(控制器)全部传递给DAO(模型),感觉不对。

1 个答案:

答案 0 :(得分:1)

只需导出对象本身而不是将其包装在函数中 - 节点模块在第一次加载后被缓存,因此它不会再次运行逻辑。

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;