簡體   English   中英

在NodeJS cronjob中未調用貓鼬查詢回調

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM