APRENDE A AUTOMATIZAR TUS TAREAS CON NODE
PUBLICADO 31 AGOSTO 2019, POR VICTOR CORNEJO
Seguramente en mas de una ocasión has tenido que recurrir a herramientas como «crontab» en GNU/Linux o el «Programador de Tareas» de Windows.
Pero estoy mas que seguro que te habrás preguntado ¿Como hacer si no tengo permisos o acceso a para programarlas en el servidor?
Desde que empece a investigar sobre Node, me sorprendí la sencillez con la que se pueden realizar soluciones que en otros lenguajes parecen complejas. Para muestra un botón!!
Escenario. Supongamos que nuestra aplicación necesita automatizar cada tanto tiempo notificaciones por correo electrónico a nuestros usuarios; listas de citas telefónicas , reportes o cualquier otro tipo de información que se considera importante recibir.
Escribamos una solución simple pero efectiva !!
const nodemailer = require('nodemailer');
const cron = require('node-cron');
function enviar() {
const task = cron.schedule('0 8 * * *', () => {
console.log('Ejecuntandose a las 8:00 AM');
var transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST, // Nuestro Servidor SMTP
port: process.env.SMTP_PORT, // Puerto del Servidor SMTP
secure: true
});
var mailOptions = {
from: process.env.MAIL_FROM, // Correo de Origen
to: process.env.MAIL_TO, // Correo o lista de destino.
subject: `TAREAS PENDIENTES`,
html: `
<h3>28 de Agosto 2019<2018>
<p>Deseamos recordarte que aun tienes pendientes las
siguientes tareas:</p>
<lo>
<li>Llamar a Pedro Picapiedra al telefono +1 875 876233</li>
<li>Llamar a Pablo Marvol al telefono +1 875 877234</li>
</lo>
<p> Gracias por la atencion. </p>
`
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log('Error => ', error);
} else {
console.log('Correo enviado => ' + info.response);
}
})
});
}
enviar();

Entendiendo como programar la frecuencia.

Crontab es una herramienta muy potente que todos debemos aprender a utilizar, la sencillez algunas veces nos sorprende, como por ejemplo la forma en que se programa la frecuencia de las tareas.
Revisemos el caso anterior donde se espera que a las 8:00 AM se envíen los correos.
El formato lo comprende 5 posiciones como se ve en la imagen, en este ejemplo lo podríamos leer de la siguiente forma: «Ejecutarse al minuto 0 de la hora 8 todos los días de todos los meses cualquier día de la semana.»
A mi me agrada la herramienta que cronitor.io ha publicado para entender el formato, te dejo el link para que lo revises. https://crontab.guru/
También es necesario indicar que puedes trabajar con rangos como por ejemplo:
const task = cron.schedule('5-10 8 * * *', () => {});
Esto se interpretaría que entre 8:05 AM y las 8:10 AM, cada minuto se estaría ejecutando la tarea definida.
Un ejemplo mas:
const task = cron.schedule('*/2 8-9 * * *', () => {});
Aca la tarea se ejecutaría a partir de las 8:02 AM , en los minutos pares hasta las 9:00 AM.
Espero que con los ejemplos descritos te hayas formado una idea general de todo el potencial que tiene esta solución para nuestras tareas programadas.
Copiar enlace