2014-05-03 68 views
1

我在NodeJS中構建了一個REST API後端,並在本地進行了測試。我試圖運行一個cron作業,從數據庫中清除過期的「登錄令牌重置代碼」,即臨時爲重置密碼而創建的代碼。我基本上執行一個Mongoose查詢,並重新保存一些數據。未在NodeJS中調用Mongoose查詢回調cronjob

我用下面的步驟來創建在Mac OSX cron作業:

  • crontab -e
  • i
  • * * * * /usr/local/bin/node PATH_TO_NODE_FILE > PATH_TO_OUTPUT_FILE
  • Esc
  • ZZ

該作業列於crontab -l,應該每分鐘執行一次。

劇本是很簡單的:

require('./../helpers/global.js')(); // Setup Global 
var User = require('./../models/user.js'); // Import User Model 

User.clearLoginTokenResetCodes(); // Call function to perform database query and modification 

,並使用console.log,其輸出到了的cronjob運行日誌文件,我可以確認和讀取文件。

然而,在用戶模型文件的功能塊:

userSchema.statics.clearLoginTokenResetCodes = function() { 
    console.log('clearLoginTokenResetCodes()'); 
    var self = this; 
    self.find({'loginTokenResetCode.expiryDate': {$lt: (new Date())}}).exec(function(err, users) { 
    console.log('Searched'); 
    }); 
}; 

在日誌文件中,我收到'clearLoginTokenResetCodes()'但不'Searched' - 特別是,我的貓鼬find()查詢永遠不會完成。我可以通過在普通的節點服務器上調用它來證實這一點。

在Mongo完成搜索之前,cronjob可能會結束。這可能是背後的問題,因此解決方案?

回答

4

我的猜測是你的代碼從來沒有實際連接到數據庫。 Mongoose會將數據庫交互排隊,直到初始連接完成,但是您忘記了實際連接到數據庫。

+0

哇。我真的很傻。我怎麼錯過那行代碼!一些代表爲你。 – MCKapur