如何让我的NodeJS应用程序永远在循环中运行

我已经写了一个NodeJS应用程序调用一个API,并在特定的时间仅在工作日发布到端点。

我可以设置一个cron作业来在指定的时间运行应用程序,但我宁愿运行它与node index.js并不断运行,什么也不做,直到它是正确的一天和时间,然后回到“睡眠”直到第二天。

我如何做到这一点? 我试了一下while循环:

 while (true) { myApp.run(); } 

显然那不太好。

什么是正确的方法来做到这一点? 我应该重写我的模块使用事件,以便我发出一个时间,并有一个对它作出反应的监听器?

– 编辑:更具体地说,我希望它以类似的方式运行在其中的Web服务器的应用程序。 当你启动应用程序,它正在运行,并等待连接; 它在请求和连接结束时不会退出,它仍然在等待更多的请求和连接。

– 编辑2:我宁愿不使用cron的原因是因为运行的日子和时间可以在appparsing的config.json文件中configuration。 我宁愿避免与cron混淆,只需通过编辑config.json文件来更改计划。

– 编辑3:我想自己编码,而不是使用模块。 当我试图编写一个永远运行的应用程序时,我的大脑总是很痛苦,我想了解它是如何完成的,而不是使用一个模块。

– 编辑4:这是我最终使用:

 function doStuff() { // code to run }; function run() { setInterval(doStuff, 30000); }; run(); 

那么你总是可以使用一个简单的setInterval :

  function execute(){ //code to execute } setInterval(execute,<calculate time interval in milliseconds you want to execute after>); 

这是一个非常基本的方式来做到这一点。 希望这可以帮助。

你可以试试这个工具https://www.npmjs.com/package/forever 。 使用非常简单:

只需运行你的脚本forever start app.js

NPM来拯救;)

节点时间表

你可以使用cron模块。 对于时间和数据,你可以从你的configuration文件加载,而不需要在代码中进行硬编码。

例:

 var CronJob = require('cron').CronJob; var job = new CronJob({ cronTime: '00 30 11 * * 1-5', onTick: function() { /* * Runs every weekday (Monday through Friday) * at 11:30:00 AM. It does not run on Saturday * or Sunday. */ }, start: false, timeZone: 'America/Los_Angeles' }); job.start(); 

所以这里是我如何解决它,因为@AJSbuild议:

 function myApp() { while (!isItTimeYet) { setInterval(myApp, 59000); } } 

这比我想象的更简单,希望它不会泄漏内存。

– 编辑:这是错误的,并泄漏内存,因为每个循环使其更深一层。 这是方式:

 function doStuff() { // code to run }; function run() { setInterval(doStuff, 30000); }; run(); 

while (true)在使用IO操作的node.js中受到限制,因为它会阻塞事件循环并阻止所有callback被调用。 如果你想永远做一些事情,你需要使用recursion:

 function func_run () { // code here //... func_run(); }