Mongoose查询callback不会在NodeJS cronjob中调用

我正在NodeJS中构build一个REST API后端,并在本地进行testing。 我试图运行一个cron作业,从数据库中清除过期的“login令牌重置代码”,临时为重置密码而创build的代码。 我本质上是执行一个Mongoose查询,并重新保存一些数据。

我使用以下步骤在Mac OSX上创build一个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正在运行并且文件被读取。

但是 ,在用户模型文件的function块中:

 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' – 特别是,我的Mongoose find()查询从未完成。 我可以通过在普通的节点服务器上调用它来确认这个工作。

在Mongo完成search之前,cronjob可能会完成。 可能是这个背后的问题,因此解决scheme?

我的猜测是你的代码从来没有实际连接到数据库。 Mongoose将排队数据库交互,直到最初的连接,但你忘记了实际连接到数据库。