2015-11-11 69 views
2

我建立是從一個特定站點刮數據的天氣應用程序,但是在當天的數據變成了,因爲我要湊數據的方式不準確的一定的時間。如果我可以每天在特定時間收集數據,這不會是一個問題。讓我的mongoDB在每天的特定時間收集數據?

是否有我的流星服務器每天早上出門,並收集新的數據,在1和存儲,我可以全天使用蒙戈數據庫中的信息的方法嗎?

回答

3

退房滲出液:同步-cron包。

https://atmospherejs.com/percolate/synced-cron

使用,你可以這樣做:

SyncedCron.add({ 
    name: 'Scrape weather data', 
    schedule: function(parser) { 
    // parser is a later.parse object 
    return parser.text('at 1:00 am'); 
    }, 
    job: function() { 
    // 
    // scraping code 
    // 
    WeatherData.insert(scrapedData); //insert to MongoDB Collection 

    } 
}); 

SyncedCron.start(); 
+0

這看起來真棒,確實解析器實際上在'凌晨1:00'接受一些非正式的東西?謝謝您的幫助! –

+0

是的,它使用later.js庫進行調度,這對於您如何指定重複來說非常靈活。看看這裏的完整文檔http://bunkat.github.io/later/ – bluebird

+0

完美!現在就開始工作吧,非常感謝! –

2

也有一個純JavaScript的基礎上setTimeout功能的解決方案:

function updateWeather() { 
    // Update weather logic 
} 

/** 
* @returns {Number} ms till next day's 1 am 
*/ 
function computeMsToNextWeatherUpdate() { 
    const tomorrow = new Date(); 

    tomorrow.setDate(tomorrow.getDate() + 1); 
    tomorrow.setHours(13); // 1 am 
    tomorrow.setMinutes(0); 
    tomorrow.setSeconds(0); 

    return tomorrow.getTime() - Date.now(); 
} 

function startWeatherUpdater() { 
    updateWeather(); 

    setTimeout(startWeatherUpdater, computeMsToNextWeatherUpdate()); 
} 

startWeatherUpdater(); 
+0

如果進程失敗,這似乎沒有考慮到。 – Todilo

+0

如果過程失敗,同步-的cron不會太 – imkost

+0

我的解決辦法是原始的,是隻有一個實例的應用程序可以接受的。如果進程失敗並重新啓動,天氣將在啓動時自動更新。如果你有一個共享數據庫的應用程序的幾個實例,那麼你應該使用像synced-cron這樣的東西。我只是表明有選擇。 – imkost

相關問題