Node.js 전자상거래 플랫폼에서 이벤트를 처리하는 방법
헤드리스 상거래 플랫폼인 Medusa의 서버 아키텍처는 목적과 용도가 다른 몇 가지 구성 요소로 구성됩니다.
이 기사는 특히 구독자, 구독자의 목적 및 Medusa에서 이벤트를 처리하는 데 사용할 수 있는 방법에 중점을 둡니다.
개요
Medusa에는 특정 동작이 발생할 때 발생하는 이벤트가 있습니다. 예를 들어 고객이 주문하면 주문 데이터와 함께
order.placed
이벤트가 발생합니다.이러한 이벤트는 플랫폼의 다른 부분 또는 타사 통합에서 이를 수신하고 그에 따라 조치를 취할 수 있도록 설계되었습니다.
구독자는 이벤트에 대한 처리기를 등록하고 해당 이벤트가 발생할 때 작업을 수행할 수 있습니다. 예를 들어 고객이 주문할 때 이메일을 보내려는 경우
order.placed
이벤트를 수신하고 이벤트가 발생하면 이메일을 보낼 수 있습니다.기본적으로 Medusa에는 다양한 이벤트를 처리하는 구독자가 있습니다. 그러나 고유한 사용자 지정 구독자를 만들 수도 있습니다.
맞춤 구독자는 프로젝트의
src/subscribers
디렉토리에 있습니다. 여기에 있는 파일은 Medusa에서 구독자로 처리되는 클래스를 내보내야 합니다. 규칙에 따라 클래스 이름은 Subscriber
로 끝나야 하며 파일 이름은 Subscriber
없이 클래스 이름의 카멜 표기 버전이어야 합니다. 예를 들어, WelcomeSubscriber
클래스는 src/subscribers/welcome.js
파일에 있습니다.이벤트가 발생할 때마다 구독자의 등록된 핸들러 메서드가 실행됩니다. 핸들러 메서드는 이벤트와 관련된 데이터를 보유하는 개체를 매개 변수로 받습니다. 예를 들어 주문이 접수되면
order.placed
이벤트가 발생하고 모든 핸들러는 매개변수 객체에서 주문 ID를 수신합니다.전제 조건
Medusa의 이벤트 시스템은 각 핸들러가 알림을 받는 Queue에 데이터를 푸시하여 작동합니다. 대기열 시스템은 Redis를 기반으로 하므로 Medusa 프로젝트에 Redis이 설치 및 구성되어 있는지 확인해야 합니다.
그런 다음 Medusa 서버에서 Redis URL을 설정해야 합니다. 기본적으로 Redis URL은
redis://localhost:6379
입니다. 다른 것을 사용하는 경우 .env
에서 다음 환경 변수를 설정합니다.REDIS_URL=<YOUR_REDIS_URL>
그런 다음
medusa-config.js
에서 다음 행을 주석 처리해야 합니다.module.exports = {
projectConfig: {
redis_url: REDIS_URL, //this line is commented out
...
}
}
그런 다음 서버에서 이벤트를 수신할 수 있습니다.
사용자 지정 구독자를 만드는 방법
src/subscribers
아래에 파일을 생성한 후 구독자의 생성자에서 eventBusService.subscribe
를 사용하여 이벤트를 수신해야 합니다. 여기서 eventBusService
는 구독자의 생성자에 삽입된 서비스입니다.eventBusService.subscribe
메서드는 이벤트 이름을 첫 번째 매개변수로 사용하고 콜백 함수를 두 번째 매개변수로 사용합니다. 이 콜백은 이벤트가 실행될 때 실행됩니다.예를 들어, 다음은
OrderNotifierSubscriber
에서 생성된 src/subscribers/orderNotifier.js
클래스입니다.class OrderNotifierSubscriber {
constructor({ eventBusService }) {
eventBusService.subscribe("order.placed", this.handleOrder);
}
handleOrder = async (data) => {
console.log("New Order: " + data.id)
};
}
export default OrderNotifierSubscriber;
이 구독자는 메서드
handleOrder
를 order.placed
이벤트의 핸들러 중 하나로 등록합니다. 메소드handleOrder
는 주문이 접수될 때마다 실행되며 data
매개변수에서 주문 ID를 수신합니다. 그런 다음 주문 세부 정보를 사용하여 필요한 작업을 수행할 수 있습니다.The
data
object will not contain other order data. Only the ID of the order. You can retrieve the order information using theorderService
.
가입자의 서비스 사용
구독자의 생성자에 주입된 종속성을 통해 anyservice에 액세스할 수 있습니다.
예를 들어:
constructor({ productService, eventBusService }) {
this.productService = productService;
eventBusService.subscribe("order.placed", this.handleOrder);
}
그런 다음 구독자 방법의 어느 곳에서나
this.productService
를 사용할 수 있습니다.결론
구독자는 Medusa 아키텍처의 한 부분일 뿐입니다. 다음은 Medusa로 더 많은 작업을 수행하도록 안내할 수 있는 몇 가지 문서입니다.
Should you have any issues or questions related to Medusa, then feel free to reach out to the Medusa team via Discord.
Reference
이 문제에 관하여(Node.js 전자상거래 플랫폼에서 이벤트를 처리하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/medusajs/how-to-handle-events-in-a-nodejs-ecommerce-platform-1nnh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)