tengo un controlador
exports.updateDaily = async (req, res) => { try { const updateDaily = await transaction.decrement( { remainActive: 1, }, { where: { remainActive: { [Op.gte]: 1 }, }, } ); console.log(updateDaily); res.status(200).send({ status: "Success", }); } catch (error) { console.log(error); res.status(400).send({ status: "Failed", }); } };y ruta como esta
router.patch('/updateDaily', updateDaily)Usando el nodo cron
let job = new cron.schedule('2 * * * *', () => { router.patch('/updateDaily', updateDaily); }); job.start()Usando setIntverval
const scheduller = () => { return router.patch('/updateDaily', updateDaily); } setInterval(scheduller,600000)¿Cómo puedo hacer que uno de ellos funcione cada 10 minutos? ya lo intente con node-cron o setInterval pero no pasa nada
Has entendido mal el concepto. Tener un trabajo programado significa ejecutar algo periódicamente, lo que tiene que ser una función que haga algo. No necesita un enrutador definido en él. Su código solo hace una cosa: programa un enrutador para que esté disponible para el usuario una vez que llega la hora programada y lo redefine cada 10 minutos.
Lo que necesita es crear una función separada para la operación y llamarla a una hora programada y tener un enrutador en este punto es adicional a menos que desee ejecutarlo cuando el usuario también envíe una solicitud.
const myDailyTask = async () => { await transaction.decrement( { remainActive: 1, }, { where: { remainActive: { [Op.gte]: 1 }, }, } ); }; const id = setInterval(myDailyTask, 600_000);Debería funcionar para el trabajo cron de la misma manera.
const job = new cron.schedule('2 * * * *', () => { myDailyTask(); }); job.start();