我正在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()'
但没有收到'Searched'
-特别是,我的Mongoosefind()
查询从未完成。我可以通过在普通的节点服务器上调用它来确认它是否有效。
cronjob可能在Mongo完成搜索之前完成。这可能是什么问题,因此又是解决方案?
我的猜测是您的代码从未真正连接到数据库。猫鼬将使数据库交互排队,直到建立初始连接为止,但是您忘记了实际连接到数据库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句