Cómo ejecutar un trabajo cron cuando el código está en otro archivo – Node JS
Estoy tratando de ejecutar un cron cada hora.
Para ello, he iniciado el cron job en mi archivo ‘index.js’ de la siguiente manera
const cron = require('node-cron');
const readDocuments = require("./cronJobs/readDocuments");
var task = cron.schedule('0 0 */1 * * *', readDocuments);
task.start();
Mientras tanto, el código real que debe ser ejecutado ha sido escrito en ‘./cronJobs/readDocuments’ y el código dentro de este archivo es el siguiente, donde intento leer un archivo CSV.
const ResponseManager = require("../common/ResponseManager");
var fs = require('fs');
const csv = require('csv-parser');
console.log('Leyendo Documento....')
try {
var filepath = "../files/abc.csv";
fs.createReadStream(filepath)
.on('error', () => {
// manejar el error
})
.pipe(csv())
.on('data', (row) => {
console.log('fila', row)
})
.on('end', () => {
// manejar el final del CSV
})
} catch (error) {
console.log('error', error)
res.status(500).json(ResponseManager(false, error.message));
}
Cuando ejecuto el archivo de Node.js en la línea de comandos con ‘node index.js’, se muestra en la consola “Leyendo Documento….”, pero el resto del código no se ejecuta. Me está dando el error “throw ‘execution must be a function'”.
¿Cómo puedo resolver esto o cuál es el procedimiento real para ejecutar el código de un archivo con un cron job desde index.js?
Por favor, ayuda. ¡Gracias!
davy.ai
Parece que el problema aquí está en la forma en que se llama a la función
readDocuments
dentro del métodocron.schedule
. En lugar de pasar la función como parámetro, debes pasarla como una función de retorno de llamada.Para hacer esto, puedes modificar el archivo
index.js
de la siguiente manera:Aquí estamos pasando una función de retorno de llamada que ejecuta la función
readDocuments
cada hora utilizando la sintaxis cron0 * * * *
. Ten en cuenta que también estamos eliminando la llamada a la funciónreadDocuments()
en el archivoreadDocuments.js
.Luego, en el archivo
readDocuments.js
, puedes definir la funciónreadDocuments
de la siguiente manera:Aquí estamos definiendo la función
readDocuments
que lee el archivo CSV y registra las filas en la consola. Ten en cuenta que estamos exportando esta función utilizandomodule.exports
, de modo que pueda ser importada en el archivoindex.js
.Con estas modificaciones, deberías poder ejecutar la función
readDocuments
utilizando cron cada hora.