如何在node.js中创建应用程序级变量

时间:2015-05-18 14:42:11

标签: node.js cron npm

在我的项目中,我使用npm cron运行了超过100个cron jon。我的问题是我需要在运行时停止任何cron作业。

我的代码是 在app.js文件中

var CronJob = require('cron').CronJob;
    module.exports = { 
        startServiceFromCronJobManager: function (scheduleServiceName) {


           var serviceList =['service1','service2','service3','service4']
          serviceList.forEach(function(service){

           var job = new CronJob('* * * * * *', function(){
                        console.log("Service running");

                      }, function () {
                            // This function is executed when the job stops
                      },
                       true /* Start the job right now */,
                       timeZone /* Time zone of this job. */
                    );
             global.jobManager.service = job;
         });

        },
        stopServiceFromCronJobManager: function (scheduleServiceName) {
             console.log(global.jobManager); 
             global.jobManager[scheduleServiceName].stop();
        }
    };

在cronJobHandle.js

var cronJobRunner =require('cronJobHandle.js');
app.route('/stopservice',function(req,res){
     cronJobRunner.stopServiceFromCronJobManager("service1");
}

router.js

Delivery Notification

当我致电http://localhost:9999/stopservice时 我在console.log(global.jobManager);

中得到了undefine

请帮助我如何维护所有服务器端js文件的cron jobManager变量comman

1 个答案:

答案 0 :(得分:2)

全局,但代码中有两个错误。

1)您正在调用名为"service"的财产,而不是名称位于service的财产。

更改

global.jobManager.service = job;

global.jobManager[service] = job;

2)你可以在cronJobHandle.js中使用global.jobManager,然后在app.js中声明它

有一个更好的解决方案。你不需要也应该使用global。只需在cronJobHandle.js中声明一个标准变量(这样其它模块就不会访问它):

var jobManager = {};
...
jobManager[service] = job;
...
jobManager[scheduleServiceName].stop();