我正在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'
- 特别是,我的Mongoose find()
查询永远不会完成。我可以通过在普通节点服务器上调用它来确认这是有效的。
在Mongo完成搜索之前,cronjob可能会完成。这可能是背后的问题,因此也就是解决方案?
答案 0 :(得分:4)
我的猜测是你的代码实际上从未连接到数据库。 Mongoose将排队数据库交互,直到建立初始连接,但您忘记实际连接到数据库。