事件参考
在本指南中,我们查看框架核心和官方包分发的事件列表。查看事件发射器文档以了解更多关于其用法的信息。
http:request_completed
http:request_completed 事件在 HTTP 请求完成后分发。该事件包含 HttpContext 实例和请求持续时间。duration 值是 process.hrtime 方法的输出。
import emitter from '@adonisjs/core/services/emitter'
import string from '@adonisjs/core/helpers/string'
emitter.on('http:request_completed', (event) => {
const method = event.ctx.request.method()
const url = event.ctx.request.url(true)
const duration = event.duration
console.log(`${method} ${url}: ${string.prettyHrTime(duration)}`)
})http:server_ready
一旦 AdonisJS HTTP 服务器准备好接受传入请求,就会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('http:server_ready', (event) => {
console.log(event.host)
console.log(event.port)
/**
* 启动应用程序和启动 HTTP 服务器
* 所花费的时间。
*/
console.log(event.duration)
})container_binding:resolved
IoC 容器解析绑定或构造类实例后分发该事件。event.binding 属性将是字符串(绑定名称)或类构造函数,event.value 属性是解析后的值。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('container_binding:resolved', (event) => {
console.log(event.binding)
console.log(event.value)
})session:initiated
@adonisjs/session 包在 HTTP 请求期间初始化会话存储时发出该事件。event.session 属性是 Session 类的实例。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session:initiated', (event) => {
console.log(`为 ${event.session.sessionId} 初始化存储`)
})session:committed
@adonisjs/session 包在 HTTP 请求期间将会话数据写入会话存储时发出该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session:committed', (event) => {
console.log(`为 ${event.session.sessionId} 持久化数据`)
})session:migrated
@adonisjs/session 包在使用 session.regenerate() 方法生成新会话 ID 时发出该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session:migrated', (event) => {
console.log(`正在迁移数据到 ${event.toSessionId}`)
console.log(`正在销毁会话 ${event.fromSessionId}`)
})i18n:missing:translation
当特定键和语言环境的翻译缺失时,@adonisjs/i18n 包会分发该事件。您可以监听此事件以查找给定语言环境的缺失翻译。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('i18n:missing:translation', function (event) {
console.log(event.identifier)
console.log(event.hasFallback)
console.log(event.locale)
})mail:sending
@adonisjs/mail 包在发送电子邮件之前发出该事件。在 mail.sendLater 方法调用的情况下,该事件将在邮件队列处理作业时发出。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('mail:sending', (event) => {
console.log(event.mailerName)
console.log(event.message)
console.log(event.views)
})mail:sent
发送电子邮件后,@adonisjs/mail 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('mail:sent', (event) => {
console.log(event.response)
console.log(event.mailerName)
console.log(event.message)
console.log(event.views)
})mail:queueing
@adonisjs/mail 包在将作业排队以发送电子邮件之前发出该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('mail:queueing', (event) => {
console.log(event.mailerName)
console.log(event.message)
console.log(event.views)
})mail:queued
电子邮件排队后,@adonisjs/mail 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('mail:queued', (event) => {
console.log(event.mailerName)
console.log(event.message)
console.log(event.views)
})queued:mail:error
当 @adonisjs/mail 包的 MemoryQueue 实现无法发送使用 mail.sendLater 方法排队的电子邮件时,会分发该事件。
如果您使用自定义队列实现,则必须捕获作业错误并发出此事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('queued:mail:error', (event) => {
console.log(event.error)
console.log(event.mailerName)
})session_auth:login_attempted
当直接或由 session guard 内部调用 auth.login 方法时,@adonisjs/auth 包的 SessionGuard 实现会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session_auth:login_attempted', (event) => {
console.log(event.guardName)
console.log(event.user)
})session_auth:login_succeeded
用户成功登录后,@adonisjs/auth 包的 SessionGuard 实现会分发该事件。
您可以使用此事件跟踪与给定用户关联的会话。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session_auth:login_succeeded', (event) => {
console.log(event.guardName)
console.log(event.sessionId)
console.log(event.user)
console.log(event.rememberMeToken) // (如果创建了)
})session_auth:authentication_attempted
当尝试验证请求会话并检查已登录用户时,@adonisjs/auth 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session_auth:authentication_attempted', (event) => {
console.log(event.guardName)
console.log(event.sessionId)
})session_auth:authentication_succeeded
请求会话已验证且用户已登录后,@adonisjs/auth 包会分发该事件。您可以使用 event.user 属性访问已登录用户。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session_auth:authentication_succeeded', (event) => {
console.log(event.guardName)
console.log(event.sessionId)
console.log(event.user)
console.log(event.rememberMeToken) // 如果使用令牌进行身份验证
})session_auth:authentication_failed
当身份验证检查失败且用户在当前 HTTP 请求期间未登录时,@adonisjs/auth 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session_auth:authentication_failed', (event) => {
console.log(event.guardName)
console.log(event.sessionId)
console.log(event.error)
})session_auth:logged_out
用户登出后,@adonisjs/auth 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session_auth:logged_out', (event) => {
console.log(event.guardName)
console.log(event.sessionId)
/**
* 当在一开始就没有用户登录的请求期间调用 logout 时,
* user 的值将为 null。
*/
console.log(event.user)
})access_tokens_auth:authentication_attempted
当在 HTTP 请求期间尝试验证访问令牌时,@adonisjs/auth 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('access_tokens_auth:authentication_attempted', (event) => {
console.log(event.guardName)
})access_tokens_auth:authentication_succeeded
访问令牌验证后,@adonisjs/auth 包会分发该事件。您可以使用 event.user 属性访问已认证用户。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('access_tokens_auth:authentication_succeeded', (event) => {
console.log(event.guardName)
console.log(event.user)
console.log(event.token)
})access_tokens_auth:authentication_failed
当身份验证检查失败时,@adonisjs/auth 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('access_tokens_auth:authentication_failed', (event) => {
console.log(event.guardName)
console.log(event.error)
})authorization:finished
授权检查执行后,@adonisjs/bouncer 包会分发该事件。事件负载包含最终响应,您可以检查以了解检查的状态。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('authorization:finished', (event) => {
console.log(event.user)
console.log(event.response)
console.log(event.parameters)
console.log(event.action)
})cache:cleared
使用 cache.clear 方法清除缓存后,@adonisjs/cache 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('cache:cleared', (event) => {
console.log(event.store)
})cache:deleted
使用 cache.delete 方法删除缓存键后,@adonisjs/cache 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('cache:deleted', (event) => {
console.log(event.key)
})cache:hit
当在缓存存储中找到缓存键时,@adonisjs/cache 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('cache:hit', (event) => {
console.log(event.key)
console.log(event.value)
})cache:miss
当在缓存存储中未找到缓存键时,@adonisjs/cache 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('cache:miss', (event) => {
console.log(event.key)
})cache:written
将缓存键写入缓存存储后,@adonisjs/cache 包会分发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('cache:written', (event) => {
console.log(event.key)
console.log(event.value)
})