실제 프로젝트에서 Node.js Event Emitter를 사용하는 이유와 방법은 무엇입니까?

옵저버 패턴과 이벤트 이미터



관찰자 패턴은 상태가 변경될 때 일련의 관찰자(또는 청취자)에게 알릴 수 있는 개체(주체라고 함)를 정의합니다.

리스너를 배열에 등록 및 저장하고 어떤 일이 발생할 때 호출할 수 있는 클래스를 사용하여 OOP에서 구현할 수 있습니다.

Node.js에서는 내장 모듈events에서 가져온 EventEmitter 클래스를 사용하여 구현할 수 있습니다. 이벤트를 내보내고 수신할 수 있습니다(여러 리스너 포함).



EventEmitter는 이벤트 코어 모듈에서 내보내집니다.

const { EventEmitter } = require("events");
const emitter = new EventEmitter();


EventEmitter의 필수 메서드는 다음과 같습니다.
  • on(event, listener) : 이 방법을 사용하면 지정된 이벤트 유형(문자열)에 대한 새 수신기(함수)를 등록할 수 있습니다.
  • once(event, listener) : 이 메소드는 새 리스너를 등록한 다음 이벤트가 처음 발생한 후 제거됩니다.
  • emit(event, [arg1], [...]) : 이 메소드는 새 이벤트를 생성하고 수신기에 전달할 추가 인수를 제공합니다.
  • removeListener(event, listener) : 이 메소드는 지정된 이벤트 유형에 대한 수신기를 제거합니다.

  • EventEmitter를 사용하는 경우



    백엔드 프로젝트에서 사용할 수 있으며 제가 사용한 실제 예는 다음과 같습니다. LMS에서 교사가 새 수업을 게시할 때 교사를 구독하는 모든 학생에게 이메일과 알림을 보내야 하므로 우리는 수업 게시 요청에 해당 코드를 삽입하여 교사가 성공 응답을 얻기 위해 이메일 및 알림이 전송될 때까지 기다리지 않고 이메일 및 알림 부분에서 게시 논리를 분리하여 분리를 달성하여 깨끗한 코드를 갖도록 합니다. 우려 원칙.
    또 다른 예는 실시간 대시보드를 업데이트해야 하거나 신규 사용자가 가입할 때 투자자에게 알림을 보내야 하는 경우입니다.

    실제 프로젝트에서 EventEmitter를 사용하는 방법



    이 폴더 구조를 만듭니다.

    /events
        /subscribers
            /lessons.subscriber.js
            /users.subscriber.js
        /emitter.js
        /index.js
    

    /emitter.js에서:
    새 EventEmitter를 만들고 내보냅니다.

    const { EventEmitter } = require("events");
    
    module.exports = new EventEmitter();
    

    /index.js에서
    생성된 EventEmitter를 가져오고 이벤트 이름과 함께 내보냅니다.

    const EventEmitter = require("./emitter");
    
    module.exports = {
      EventEmitter,
      events: {
        LESSON_PUBLISHED: "LESSON_PUBLISHED",
        NEW_SIGNUP: "NEW_SIGNUP"
      }
    };
    


    다른 파일에서 이벤트 이름을 분리할 수도 있지만 그럴 필요는 없습니다.
    subscribers/users.subscriber.js에서:
    이벤트와 EventEmitter 인스턴스를 가져오고 이벤트를 수신합니다.

    const { events, EventEmitter } = require("../");
    
    EventEmitter.on(events.NEW_SIGNUP, user => {
      // Your logic
    }
    


    이제 리스너 부분이 끝났습니다. 컨트롤러 또는 서비스에서 EventEmitter 인스턴스를 가져올 수 있고 이벤트 이름은 이벤트를 내보내고 다음과 같이 원하는 데이터를 전달할 수 있습니다.

    EventEmitter.emit(events.NEW_SIGNUP, user);
    



    이 기사가 마음에 드셨기를 바랍니다. 더 많은 정보를 원하시면 블로그를 팔로우하세요.

    좋은 웹페이지 즐겨찾기