繁体   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