- Event.on메소드를 사용해 이벤트 등록하기
/start/events.ts
import Event from '@ioc:Adonis/Core/Event'
Event.on('new:user', (user) => {
console.log(user)
})
첫번째 인자로 이벤트 이름(new:user)을 받고, 두번째 인자로 이벤트를 받는다.
- new:user을 실행하기 위해 Event.emit 설정하기
/Models/User/ts
@afterCreate()
public static async sayHello (user: User) {
await Event.emit('new:user', user)
}
유저가 생성될 때마다 이벤트를 발생시켜보기 위해 유저 모델에 설정한다.
- 타입 정의해두기
/contracts/events.ts
import User from 'App/Models/User'
declare module '@ioc:Adonis/Core/Event' {
interface EventsList {
'new:user': User
}
}
1번과 2번은 주로 다른 파일에 설정해서 잘못된 인자를 받아올 수 있어서 타입을 정의한다.
- 이벤트 리스너 따로 만들기
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 공식문서