노드에서 Cron 작업을 스케줄링합니다.노드 크론이 있는 js

6873 단어 nodejavascript
개발자로서 우리는 이런 상황을 자주 만난다. 즉, 우리는 특정한 과정이 특정한 시간표에 따라 진행되기를 바란다.그것은 매주 월요일 저녁에 오류 로그를 지우고, 활동 발생 전날 등록하지 않은 사용자에게 이메일을 보내고, 오래된 데이터를 압축하는 등등...
이런 상황에서 우리는cron의 일을 기대합니다!노드에 있습니다. node-cron 의 도움으로 Cron 설정 작업은 간단합니다.우리가 그것이 무엇을 할 수 있는지 봅시다.

뭐 공부 해요?


아마도 너는 누군가가 매일 너를 보충하고 너의 그날의 업무 효율과 진보를 칭찬하기를 바란다.있다 node-cron 가능하다!

이 강좌에서 우리는 노드에 Express 서버를 설정할 것이다.js는 마음에 들지 않는 개발자에게 (또는 당신 자신에게...)매일 부끄럽지 않은 칭찬이 있다.이 서버는 매일 저녁 5시 30분에 임무를 실행하도록 안배하여 개발자들이 업무 중에 풍부한 성과를 거두는 것을 축하할 것이다.시작합시다!
이 강좌는 당신의 기계에 설치되었다고 가정합니다Node.js

설정 작업


여기서 첫 번째 단계는 간단한 Express 서버를 시작하고 실행하는 것입니다.항목을 저장하려면 디렉토리가 필요합니다.
mkdir <project-name> 
cd <project-name>

설치 모듈


이제 이 디렉토리에서 NPM을 초기화하여 필요한 패키지를 설치합니다.
npm init

저희 package.json 파일이 생성되었습니다. 이 패키지를 설치하겠습니다.우리는 다음을 필요로 합니다.

  • express - 웹 서버 프레임워크

  • node-cron - 작업 스케줄링

  • nodemailer - 이메일 보내기
  • npm i --save express node-cron nodemailer
    
    

    기본 서버 구축


    우리 서버의 포털 파일은 index.js 로 명명됩니다.실행을 통해 생성:
    touch index.js
    
    
    다음 내용으로 간단한 express 서버를 시작합니다.
    const express = require('express'),
          app = express(),
          nodemailer = require('nodemailer'),
          cron = require('node-cron'),
          PORT = 3001
    
    app.listen(PORT, () =>  
        console.log(`Listening on ${PORT}`)
    )
    
    
    여기서, 우리는 맨 위에 필요한 모든 패키지를 가져오고, express 프로그램을 실례화하고, 포트 3000에서 서버를 시작하고 있습니다.
    우리의 express 서버는 이미 모두 설정되었습니다!다음 명령을 실행하여 서버를 시작할 수 있습니다.
    node index.js
    
    

    우리의 임무를 안배하다


    우리 서버 그룹이 있으면 우리는 지금 스케줄링을 시작할 수 있습니다!node-cron에는 schedule()라는 주함수가 있는데 이것은 모든 작업의 출발점이다.schedule() 세 가지 매개변수를 사용할 수 있습니다.
  • expression - 작업이 실행될 시간을 정의하는cron 표현식입니다.이것은 표준적인cron 문법과 라이브러리에 특정한 추가 옵션을 따릅니다. here
  • function - 지정된 시간 간격
  • 에서 실행되는 함수입니다.
  • options - 구성 옵션을 사용하는 객체입니다.이 옵션에 대해 설명합니다here.이 강좌에서, 우리는 어떠한 추가 옵션도 설정하지 않기 때문에, 나는 이 인자를 생략할 것이다.
  • 다음은 간단한 예입니다.

    여기서 우리는 다음과 같은 표현식 스케줄링 임무에 근거한다. * * * * *, 이 표현식은 분당 계산된다.이 작업을 실행할 때마다 메시지running every minute가 콘솔에 기록됩니다.
    다음은 추가 표현식 예입니다.
  • * * * * Fri매주 금요일 운행
  • 1 * * * * 날짜당 분 수는 1 시입니다.(12:01, 3:01, 4:01)
  • 45 7 * * * 매일 오전 7시 45분 운행(24시간 시계 사용)
  • 우리의 장면(매일 오후 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분에 임무를 실행하는express 서버가 있습니다.node-cron 설정이 매우 간단합니다.이제 우리는 이 프로젝트를 완성하고 자신에게 우리가 필요로 하는 격려를 보내기 시작할 수 있습니다!

    이메일 보내기


    Gmail 계정을 사용하여 메일 요청을 설정합니다.만약 당신이 이메일을 보내려고 시도할 때 어떤 인증 오류를 받았다면, 아마도 Gmail이 차단되었기 때문일 것이다 Less Secure Apps.이 설정을 Allow Less Secure Appshere로 전환해야 합니다.
    참고: 테스트를 완료한 후 이 설정을 닫는 것이 좋습니다.

    우리의 운송차를 설치하다


    우리는 우선 이른바 atransporter를 설치해야 한다.인증 세부 정보 및 전자 메일 호스트에 대한 정보가 저장됩니다.
    const transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: '[email protected]',
            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: '[email protected]',
            pass: 'password'
        }
    })
    
    cron.schedule('30 17 * * *', async () => 
        transporter.sendMail({
            from: '[email protected]',
            to: '[email protected]',
            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분에 이메일 한 통이 [email protected] 에서 [email protected] 으로 전송되고 매우 고무적인 메시지를 보냅니다.😁

    결론


    우리의 응용 프로그램이 완성됨에 따라, 우리는 현재 매일 자신에게 급히 필요한 격려를 보낼 수 있다. (또는 더욱 빈번하게 보낼 수 있다. 구체적으로는 당신이 임무를 어떻게 설정하고 당신의 요구 수준에 달려 있다.)😜).You are awesome 필요한 시간 간격으로 임무를 배치하는 것이 매우 쉽다.그것은 또 많은 다른 설정이 있어서 그것을 위해 매우 멋진 용례를 제공했다.나는 그들의 문서를 읽고 각종 설정 옵션으로 무엇을 할 수 있는지 보라고 강력히 건의한다.
    도움이 되었으면 좋겠습니다. 읽어 주셔서 감사합니다!
    freepik에서 만든 달력 벡터 - www.freepik.com

    좋은 웹페이지 즐겨찾기