npm install --save node-cron
package.json
에 node-cron 모듈을 추가해주기 위해 --save
옵션을 사용했다.
Node.js 서버가 기본으로 실행하는 파일(app.js
또는 index.js
)에 node-cron 모듈을 불러와 사용하면 된다.
스케줄러에 의해 실행할 작업은 콜백 함수 안에 작성해주면 된다.
아래에 테스트 삼아 콘솔 로그를 출력하는 함수를 작성해보았다.
const cron = require('node-cron');
// second minute hour day-of-month month day-of-week
cron.schedule('* * * * *', function(){
console.log('node-cron 실행됨');
});
// second minute hour day-of-month month day-of-week
cron.schedule('* * * * *', function(){
// 작업 내용
});
위에 *
표시 5개가 작업이 반복적으로 실행될 시점을 의미한다.
순서대로, second(초)
, minute(분)
, hour(시)
, day-of-month(날짜)
, month(월)
, day-of-week(요일)
을 의미한다.
💡 각 요일마다, 해당 요일에 수업이 있는 수강생의 남은 수업 횟수를 1회 씩 차감하기
잘 작동한다!
app.js 파일에 작성한 실제 코드이다.
const cron = require("node-cron");
// 요일 id를 인자로 받아, 해당 요일에 수업이 있는 수강생의 수업 횟수를 1회 차감하는 함수
const { minusUserCounts } = require("./controllers/functions/sequelize");
// 요일 이름과 id값을 저장한 배열
const days = [
{ id: 1, name: "Mon", toMinus: 7 },
{ id: 2, name: "Tue", toMinus: 1 },
{ id: 3, name: "Wed", toMinus: 2 },
{ id: 4, name: "Thu", toMinus: 3 },
{ id: 5, name: "Fri", toMinus: 4 },
{ id: 6, name: "Sat", toMinus: 5 },
{ id: 7, name: "Sun", toMinus: 6 },
];
// 스케쥴러 설정: 각 요일의 자정마다, 수강생의 수업 횟수를 1회씩 차감하도록 설정
days.forEach((day) => {
cron.schedule(`0 0 0 * * ${day.name}`, async () => {
try {
const updated = await minusUserCounts(day.toMinus);
console.log({ message: "counts updated", updated });
} catch (err) {
console.error(err);
}
});
});