개발자로서 우리는 특정 일정에 따라 일부 프로세스가 발생하기를 원하는 상황을 자주 실행합니다.
매주 월요일 저녁에 오류 로그를 지우고, 이벤트가 발생하기 전날 이벤트에 체크인 하지 않은 사용자에게 이메일을 보내고, 오래된 데이터를 보관하는 등의 작업을 수행 할 수 있습니다.
이와 같은 상황에서 우리는 크론 작업을 찾습니다! Node.js에서 Cron 작업 설정은 node-cron의 도움으로 간단합니다. 무엇을 할 수 있는지 살펴 보겠습니다.
https://blog.sabinthedev.com/scheduling-cron-jobs-in-nodejs-with-node-cron-ckdpewp3p014bkbs1fekfhxlp
우리가 구축 할 것
아마도 누군가가 당신의 생산성과 그날의 발전을 칭찬하면서 매일 당신을 보완 해주기를 원할 것입니다. 가능한 노드 크론으로!
이 튜토리얼에서 우리는 Node.js에 Express 서버를 설정하여 저평가 된 개발자 (또는 자신 ...)에게 매일 칭찬을 받을 만합니다. 이 서버는 매일 저녁 5시 30 분에 작업을 실행하도록 예약하여 작업 중인 생산적인 날의 개발자를 축하합니다. 시작하자!
이 가이드에서는 머신에 Node.js가 설치되어 있다고 가정합니다.
설정하기
여기서 첫 번째 단계는 간단한 Express 서버를 설치하고 실행하는 것입니다. 프로젝트를 보관할 디렉토리가 필요합니다.
mkdir <project-name>
cd <project-name>
모듈 설치
이제 필요한 패키지를 설치할 수 있도록 이 디렉토리에서 NPM을 초기화 하려고 합니다.
npm init
package.json 파일이 생성되었으므로 이제 해당 패키지를 설치하겠습니다. 다음이 필요합니다.
npm i --save express node-cron nodemailer
기본 서버 구축
서버의 엔트리 파일 이름은 index.js입니다. 다음을 실행하여 만듭니다.
touch index.js
그리고 다음과 같이 간단한 익스프레스 서버를 시작합니다.
const express = require('express'),
app = express(),
nodemailer = require('nodemailer'),
cron = require('node-cron'),
PORT = 3001
app.listen(PORT, () =>
console.log(`Listening on ${PORT}`)
)
여기에서는 맨 위에 필요한 모든 패키지를 가져 와서 익스프레스 앱을 인스턴스화하고 포트 3000에서 서버를 시작합니다.
익스프레스 서버가 모두 설정되었습니다! 다음 명령을 실행하여 서버를 시작할 수 있습니다.
node index.js
우리의 작업 일정
서버 세트를 사용하여 이제 일정을 잡을 준비가 되었습니다! node-cron에는 모든 작업의 시작점인 schedule()이라는 하나의 주요 함수가 있습니다. schedule()은 세 가지 매개 변수를 사용할 수 있습니다.
다음은 간단한 예입니다.
여기서는 다음 식에 따라 실행되도록 작업을 예약합니다. * * * * *, 매분 평가됩니다. 이 작업이 실행될 때마다 1 분마다 실행되는 메시지가 콘솔에 기록됩니다.
다음은 표현식의 몇 가지 예입니다.
시나리오 (매일 오후 5시 30 분)에서 찾을 표현은 다음과 같습니다. 30 17 * * *
그러니 일정을 잡으세요!
const express = require('express'),
app = express(),
nodemailer = require('nodemailer'),
cron = require('node-cron'),
PORT = 3001
cron.schedule('30 17 * * *', () =>
console.log('Running at 5:30pm every day')
)
app.listen(PORT, () =>
console.log(`Listening on ${PORT}`)
)
대박! 매일 오후 5시 30 분에 작업을 실행하도록 예약하는 익스프레스 서버가 있습니다. node-cron은 설정을 매우 간단하게 만들었습니다. 이제 우리는 이 프로젝트를 끝내고 우리에게 필요한 격려를 보낼 수 있습니다!
이메일 보내기
메일 보내기 요청을 설정하기 위해 Gmail 계정을 사용할 것입니다. 이메일을 보내려고 할 때 일종의 인증 오류가 발생하면 Gmail이 보안 수준이 낮은 앱을 차단했기 때문일 수 있습니다. 여기에서 보안 수준이 낮은 앱 허용으로 이 설정을 켜야 합니다.
참고 : 테스트가 끝나면 이 설정을 다시 끄는 것이 좋습니다.
Set up our transporter
transporter라고 하는 것을 설정해야 합니다. 여기에는 인증 세부 정보 및 이메일 호스트에 대한 정보가 있습니다.
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'password'
}
})
참고 : 실제 시나리오에서 인증 세부 정보는 소스 코드에 자격 증명을 저장하지 않도록 비밀 또는 일종의 환경 변수로 저장해야 합니다.
이것은 이메일 전송을 시작할 준비가 된 전송을 설정합니다. 예약 된 작업 내에서 이메일을 보내겠습니다.
const express = require('express'),
app = express(),
nodemailer = require('nodemailer'),
cron = require('node-cron'),
PORT = 3001
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'password'
}
})
cron.schedule('30 17 * * *', async () =>
transporter.sendMail({
from: 'your-email@gmail.com',
to: 'recipient@hey.com',
subject: 'You are awesome',
text: 'You did SUCH A GOOD JOB TODAY. CONGRATS!! ???'
}, (error, info) => {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
})
)
app.listen(PORT, () =>
console.log(`Listening on ${PORT}`)
)
그리고 그렇게 할 것입니다! 매일 오후 5시 30 분에 이메일이 your-email@gmail.com에서 recipient@hey.com으로 전송됩니다. 제목은 You are awesome이며 매우 고무적인 메시지입니다 ?
결론
신청서가 완료되면 이제 매일 (또는 작업을 구성하는 방법과 얼마나 궁핍한지에 따라 더 자주) 매우 필요한 격려를 보낼 수 있습니다.
node-cron을 사용하면 원하는 시간 간격으로 작업을 매우 쉽게 예약 할 수 있습니다. 또한 꽤 멋진 사용 사례를 제공하는 많은 다른 구성이 있습니다. 다양한 구성 옵션으로 무엇을 할 수 있는지 확인하기 위해 문서를 읽는 것이 좋습니다.
등록된 댓글이 없습니다.