Nội dung bài viết
Video học lập trình mỗi ngày
Nodejs cron jobs hay còn gọi là node schedule. Có nghĩa là trong hệ thống server sẽ cài đặt một lịch chạy tự động để giải quyết một công việc nào đó như send email sử dụng cron jobs. Những bạn nào làm backend thì chắc chắn sẽ không xa lạ gì với công việc này. Và bài viết này tôi sẽ giải thích kỹ hơn và sâu hơn nữa thì job scheduler bản chất nó là gì?
Đầu tiên tôi sẽ show build một cron jobs mà không dung bất cứ một api hay thư viện nào hết, mục đích cho các bạn hình dung bản chất nó là gì?
Build a Cron-Job using setTimeout javascript
setTimeout là hầu như không thể không biết, setTimeout support nodejs và browser đầy đủ. Giờ ta lướt qua cú pháp nó thế nào?
Cú pháp setTimeout
setTimeout(fn, ms)
ms là milisecons, 1000 ms = 1 second. Sử dụng setTimeout
setTimeout(()=>console.log("Hello Anonystick !!"), 1000)
Run function này thì sau 1 second thì sẽ print ra string: Hello Anonystick !!
Ok! Bây giờ chúng ta sẽ tự tạo một fucntion tự động print ra Hello Anonystick mỗi một giây. Sử dụng setTimeout API.
File app.js
function cron(ms, fn) { function cb() { clearTimeout(timeout) timeout = setTimeout(cb, ms) fn() } let timeout = setTimeout(cb, ms) } cron(1000, () => { console.log('Hello Anonystick') })
Các bạn có thể node app.js Và xem kết quả.
Với câu lênh trên thì khi gọi function cron thì sẽ thiết lập một setTimeout luôn luôn chạy và không dừng. Cho đến khi ta tắt Terminal or Ctrl + C thì sẽ hết thực thi. Tất nhiên chúng ta sẽ có cách mà không cần đến Ctrl + C.
Nhưng làm gì cho mệt trong khi có một middleware trong nodejs sẽ giúp chúng ta thực hiện một cách dễ dàng trong khi ta vẫn ngủ =]]
Set up a cron jobs nodejs
Create file app.js
const express = require('express'); // Define port for app to listen on const port = process.env.PORT || 8080; /* ==================================================== */ /* ===== Section 2: Configure express middlewares ===== */ /* ==================================================== */ const app = express(); /* ==================================== */ /* ===== Section 3: Making Routes ===== */ /* ==================================== */ // set routes app.get('/', (req, res) => { res.render('index.html'); }); // To make the server live app.listen(port, () => { console.log(`App is live on port ${port}`); });
Giờ chúng ta thử chạy function cron middleware express mà chúng ta đã viết ở trên
const express = require('express'); // Define port for app to listen on const port = process.env.PORT || 8080; /* ==================================================== */ /* ===== Section 2: Configure express middlewares ===== */ /* ==================================================== */ function cron(ms, fn) { function cb() { clearTimeout(timeout) timeout = setTimeout(cb, ms) fn() } let timeout = setTimeout(cb, ms) return {}; } cron(1000, () => { console.log('Hello Anonystick in middleware ') }) const app = express(); /* ==================================== */ /* ===== Section 3: Making Routes ===== */ /* ==================================== */ // set routes app.get('/', (req, res) => { res.render('index.html'); }); // To make the server live app.listen(port, () => { console.log(`App is live on port ${port}`); });
Kết quả chúng ta sẽ thấy hình dưới.
Bây giờ chúng ta sẽ install một middleware giúp chúng ta thực hiện cron jobs một cách hiệu quả đó là node-cron
Using node-cron create job scheduler in nodejs
$ npm i node-cron --save
Lúc đó file app.js sẽ thay đổi như thế này.
const express = require('express'); const cron = require('node-cron') // Define port for app to listen on const port = process.env.PORT || 8080; /* ==================================================== */ /* ===== Section 2: Configure express middlewares ===== */ /* ==================================================== */ //set up cronjobs cron.schedule('* * * * *', () => { console.log('Nếu không set gì hết thì mặc định sẽ chạy mỗi phút 1 lần'); }); const app = express(); /* ==================================== */ /* ===== Section 3: Making Routes ===== */ /* ==================================== */ // set routes app.get('/', (req, res) => { res.render('index.html'); }); // To make the server live app.listen(port, () => { console.log(`App is live on port ${port}`); });
Thường thì chúng ta sẽ chú ý những tham số "*****". Giải thích Sau khi xem qua hình ảnh thì chúng ta có thể đoán được rằng
//set up cronjobs cron.schedule('* * * * *', () => { console.log('Nếu không set gì hết thì mặc định sẽ chạy mỗi phút 1 lần'); }); cron.schedule('1,2,4,5 * * * *', () => { console.log('chạy vào phút thứ 1, 2, 4, và 5'); });
Để hiểu thêm hơn các bạn nên đọc thêm npm node-cron
Vậy là xong, qua bài này tôi và các bạn đã hiểu rõ hơn bản chất của set up a cron jobs in nodejs thế nào rồi phải không?
Cảm ơn các bạn đã đọc!