Node.js에서 Cron 작업 예약

14090 단어 nodewebdevjavascript


node.js의 Cron 작업은 특정 간격으로 서버에서 스크립트를 반복해서 실행해야 할 때마다 유용합니다. 특정 시간이나 요일에 사용자에게 이메일을 보내는 것과 같은 모든 작업이 될 수 있습니다. 이 기사에서는 nodemailer 의 도움으로 이를 테스트할 것입니다.

먼저 다음 명령을 사용하여 노드 애플리케이션을 만듭니다.

mkdir cron-jobs
npm init -y


이제 npm에서 node-cron 및 nodemailer 패키지를 설치해야 합니다. 애플리케이션의 진입점 또는 간단히 서버 파일로 index.js라는 파일을 만듭니다.

npm install node-cron 
npm install nodemailer
touch index.js



//index.js
const express = require("express")
const cron = require("node-cron")
const nodemailer = require("nodemailer")
const app = express()

app.listen(8000)


크론 작업을 설정하기 전에 먼저 nodemailer를 설정합시다.

let transporter = nodemailer.createTransport({
    service: "gmail",
    auth: {
        user: "[email protected]",
        pass: "password"
    }
})

let mailOptions = {
    from: "[email protected]",
    to: "[email protected]",
    subject: "Nodemailer",
    text: "Testing Nodemailer",
    html: "<h1>Testing Nodemailer</h1>"
}

transporter.sendMail(mailOptions, (err, info) => {
    if(err) {
        console.log("error occurred", err)
    } else {
        console.log("email sent", info)
    }
})



  • transporter는 우리가 사용하고 있는 이메일 서비스를 보유하고 있는 객체이며, 보낸 사람의 이메일과 비밀번호가 있는 인증 객체입니다.

  • mailOptions에는 표준 이메일 정보가 포함되어 있습니다. ejs 또는 hbs와 같은 템플릿을 사용할 수도 있습니다.

  • sendMail 메소드는 mailOptions 및 콜백을 받습니다.


  • It's important to note that we're using gmail as the service. In order to use it, we will have to turn on the less secure app feature.



    Cron의 일정 방법은 다음을 사용합니다.
  • cron 작업이 실행되는 시간 간격입니다.
  • 메시지가 전송된 후 실행되는 콜백 함수입니다.


  • cron.schedule의 별표는 코드가 실행되는 시간 간격을 나타냅니다. 아래 형식에 설명된 대로 시간을 설정할 수 있습니다.

    ┌──────────────── second (optional) 
    | ┌────────────── minute 
    | | ┌──────────── hour 
    | | | ┌────────── day of month 
    | | | | ┌──────── month 
    | | | | | ┌────── day of week
    | | | | | | 
    | | | | | |
    * * * * * *
    



    //For a cron job to run every second
    cron.schedule("* * * * * *", () => {
        //code to be executed
    })
    
    //This will run every 10 seconds
    cron.schedule("*/10 * * * * *", () => {
        //code to be executed
    })
    
    //This will run at the start of every minute
    cron.schedule("0 * * * * *", () => {
        //code to be executed
    })
    
    //This will run at the start of every hour
    cron.schedule("0 * * * *", () => {
        //code to be executed
    })
    
    // This will run on 20th of every month at 02:00 hours
    cron.schedule("* 02 20 * *", () => {
        //code to be executed
    })
    



    nodemailer로 cron 작업 설정



    최종 코드는 다음과 같습니다.

    
    const express = require("express")
    const cron = require("node-cron")
    const nodemailer = require("nodemailer")
    const app = express()
    
    let transporter = nodemailer.createTransport({
        service: "gmail",
        auth: {
            user: "[email protected]",
            pass: "password"
        }
    })
    
    // Here, we're scheduling a cron job and it will send an email at the start of every minute.
    // Info contains the mail content.
    // In case of sending mail to multiple users, we can add multiple recipients.
    cron.schedule("* * * * *", () => {
        console.log("sending email")
        let mailOptions = {
            from: "[email protected]",
            to: "[email protected]",
            subject: "Nodemailer",
            text: "Testing Nodemailer",
            html: "<h1>Testing Nodemailer</h1>"
    }
    
    transporter.sendMail(mailOptions, (err, info) => {
        if (err) {
            console.log("error occurred", err)
        } else {
            console.log("email sent", info)
        }
      })
    })
    
    app.listen(8000)
    
    


    마지막으로 터미널로 이동하여 서버를 시작합니다.

    node index.js
    



    이 기사를 읽어 주셔서 감사합니다. 더 많은 업데이트를 위해 저를 팔로우하세요.

    좋은 웹페이지 즐겨찾기