事件参考
在本指南中,我们查看框架核心与官方包派发的事件列表。查看 emitter 文档以了解其用法的更多信息。
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)
/**
* Time it took to boot the app and start
* the HTTP server.
*/
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
当在 HTTP 请求期间初始化会话存储时,@adonisjs/session 包会派发该事件。event.session 属性是
Session 类
的实例。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session:initiated', (event) => {
console.log(`Initiated store for ${event.session.sessionId}`)
})
session:committed
当在 HTTP 请求期间将会话数据写入会话存储时,@adonisjs/session 包会派发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session:committed', (event) => {
console.log(`Persisted data for ${event.session.sessionId}`)
})
session:migrated
当使用 session.regenerate() 方法生成新的会话 ID 时,@adonisjs/session 包会派发该事件。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('session:migrated', (event) => {
console.log(`Migrating data to ${event.toSessionId}`)
console.log(`Destroying session ${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 包使用 mail.sendLater 方法加入队列的邮件无法发送时,会派发该事件(即
MemoryQueue
实现)。
如果你使用自定义的队列实现,必须捕获任务错误并派发此事件。
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
当直接或由会话守卫在内部调用 auth.login 方法时,
SessionGuard
实现的 @adonisjs/auth 包会派发该事件。
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
当用户成功登录后,
SessionGuard
实现的 @adonisjs/auth 包会派发该事件。
你可以使用此事件来跟踪与给定用户关联的会话。
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) // (if created one)
})
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) // if authenticated using token
})
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)
/**
* The value of the user will be null when logout is called
* during a request where no user was logged in in the first place.
*/
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)
})