重新初始化表达申请

时间:2016-04-25 14:31:56

标签: node.js express

我有node.js应用程序,它是在express.js框架上构建的。

const app = express();
require('./config')(app);
require('./services')(app);

./ config / config.js我们实例化config:

module.exports = function (app) {
   const conf = {APIKey: 1234567890, url: '<someurl>'};
   app.set('config', conf);
};

./services/APIService.js我们创建服务实例(单例)

module.exports = (app) => {
  app.set('apiService', new APIService(app));
};

function APIService(app) {
   const config = app.get('config');
   this.key = config.APIKey;
};

APIService.prototype.sendRequest = () => {
   const config = app.get('config');
   this._send(config.url, 'some text');
};

或者,service2

module.exports = function(app) {
   const config = app.get('config');
   const myMod = require('myMod')(config.APIKey);
}

很酷,一切正常。但有时管理员会更改一些配置数据。所以,我们创建新配置,将他设置为

newConf = {APIKey: 1234000000, url: '<some_new_url>'};
app.set('config', newConf);

APIService.sendRequest ,会向CHANGED网址发送请求,但 APIService.key 仍未更改。并且 myMod 已经使用旧配置数据进行了实例化。

我们需要写一些setter方法,比如这个

//for APIService
APIService.prototype.setConfig = () => {
   const config = app.get('config');
   this.key = config.APIKey;
};

//for service 2
/* change const myMod to let myMod and create method for overriding */

bang! kill并重新启动node.js服务器进程。馊主意。可能存在一些实现此目标的方法,例如 app.restart(),以便安全地重新初始化应用程序(或者,可能是他的部分)?

1 个答案:

答案 0 :(得分:0)

您是否尝试再次致电app.set('apiService', new APIService(app));?或者只是在你的参数的原型上有吸气剂和二传手。

更好的方法是在每个新请求中使用中间件创建一个新的APIService对象,例如:

app.use(function (req, res, next){
   req.api = new APIService(app);
   next();
});

并使用req.api。