Ich bin auf der Suche nach einer Möglichkeit, die Abonnements unserer Benutzer mit einem Cron-Job täglich zu überprüfen. Ich möchte dafür node-cron verwenden. Ich bin mir nicht sicher, wo ich den Code setzen sollte, um den Cronjob zu starten. Derzeit habe ich es wie folgt ein:MEAN App Cron-Job mit Node-Cron bei App laden mit API-Aufruf
app.js:
app.listen(config.port, function() {
// Logging initialization
console.log('--');
console.log(chalk.green(config.app.title));
console.log(chalk.green('Environment:\t\t\t' + process.env.NODE_ENV));
console.log(chalk.green('Port:\t\t\t\t' + config.port));
console.log(chalk.green('Database:\t\t\t\t' + config.db.uri));
if (process.env.NODE_ENV === 'secure') {
console.log(chalk.green('HTTPs:\t\t\t\ton'));
}
console.log('--');
if (callback) callback(app, db, config);
var job1 = new cron.CronJob({
cronTime: '* * * * *',
onTick: function(){
app.get('/api/users/checkSubscriptions/').success(function() {
console.log('working!')
}).error(function() {
console.log('error!')
});
},
start: false,
timeZone: 'Europe/Paris'});
job1.start();
});
users.server.routes.js
'use strict';
module.exports = function(app) {
app.route('/api/users/checkSubscriptions/')
.get(subscriptionCheck.checkSubscriptions);
};
Cronjob-subscription.server. Steuerung
var mongoose = require('mongoose'),
User = mongoose.model('User');
exports.checkSubscriptions = function() {
User.findAll(function(err, users) {
if(err) {
console.log(err);
} else {
for(var i = 0;i< users.length; i++) {
var user = users[i];
console.log(user);
}
}
});
}
Derzeit möchte ich nur die Benutzer auf der Konsole drucken, um zu überprüfen, ob dies funktioniert. Mit dem aktuellen Code in app.js ich die folgende Fehlermeldung erhalten:
app.get('/api/users/checkSubscriptions/').success(function() {
^
TypeError: app.get is not a function
Könnten Sie bitte beraten, wie ich den API-Aufruf in der cronjob tun kann, wenn die App Initialisierung?
scheint in Ordnung außerhalb des 'app.listen' zu arbeiten. Ich denke, das macht Sinn, wenn versucht wird, 'app.get' zu initialisieren, bevor' app.listen' beendet ist. Ich bin mir auch nicht so sicher, wie lebensfähig Knoten-Cron und ein Express-Server zur gleichen Zeit ausgeführt wird. – TomFirth
@TomFirth beim Platzieren des Codes außerhalb der app.listen ich immer noch die gleiche Fehlermeldung (app.get ist keine Funktion ..). Wie würden Sie vorschlagen, dass ich dies ohne den Knoten-Cronm implementieren, aber innerhalb Express dann? –