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