首页 文章

在NodeJS cronjob中未调用Mongoose查询回调

提问于
浏览
1

我正在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 ,输出到日志文件,我可以 confirm cronjob正在运行并且文件被读取 .

However ,在用户模型文件的功能块中:

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完成搜索之前,cronjob可能会完成 . 这背后可能是什么问题,因此解决方案?

1 回答

  • 4

    我的猜测是你的代码实际上从未连接到数据库 . Mongoose将排队数据库交互,直到 Build 初始连接,但您忘记实际连接到数据库 .

相关问题