[英]Mongoose query callback not invoked in NodeJS cronjob
我正在NodeJS中構建一個REST API后端,並在本地對其進行測試。 我正在嘗試執行cron作業,以從數據庫中清除過期的“登錄令牌重置代碼”,即為重置密碼而臨時創建的代碼。 我實質上是在執行Mongoose查詢,然后重新保存一些數據。
我使用以下步驟在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()'
但未收到'clearLoginTokenResetCodes()'
'Searched'
-特別是,我的Mongoose find()
查詢從未完成。 我可以通過在普通的Node服務器上調用它來確認它是否有效。
cronjob可能在Mongo完成搜索之前完成。 這背后可能是什么問題,因此又是解決方案?
我的猜測是您的代碼從未真正連接到數據庫。 貓鼬將使數據庫交互排隊,直到建立初始連接為止,但是您忘記了實際連接到數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.