Adonis/ 이벤트 처리

flobeeee·2021년 9월 28일
0

Today I Learned

목록 보기
19/35
post-thumbnail
  1. Event.on메소드를 사용해 이벤트 등록하기
/start/events.ts


import Event from '@ioc:Adonis/Core/Event'

Event.on('new:user', (user) => {
  console.log(user)
})

첫번째 인자로 이벤트 이름(new:user)을 받고, 두번째 인자로 이벤트를 받는다.

  1. new:user을 실행하기 위해 Event.emit 설정하기
/Models/User/ts

@afterCreate()
  public static async sayHello (user: User) {
    await Event.emit('new:user', user)  
  }

유저가 생성될 때마다 이벤트를 발생시켜보기 위해 유저 모델에 설정한다.

  1. 타입 정의해두기
/contracts/events.ts

import User from 'App/Models/User'

declare module '@ioc:Adonis/Core/Event' {
  interface EventsList {
    'new:user': User
  }
}

1번과 2번은 주로 다른 파일에 설정해서 잘못된 인자를 받아올 수 있어서 타입을 정의한다.


  • 위 처럼 작업할 수도 있고, 이벤트 리스너를 따로 만들어서 작업할 수도 있다.
  1. 이벤트 리스너 따로 만들기
app/Listeners/UserMailListener.ts

import { EventsList } from '@ioc:Adonis/Core/Event'

export default class UserMailListener {
  public async onNewUser(user: EventsList['new:user']) {
    // send email to the new user
  }
}

그리고 1번에서 정의했던 코드를 변경한다.

// 변경 전
Event.on('new:user', (user) => {
  console.log(user)
  
// 변경 후
Event.on('new:user', 'UserMailListener.onNewUser')

참고 : Adonis 공식문서

profile
기록하는 백엔드 개발자

0개의 댓글