数据查询 Debug

未匹配的标注

当全局启用调试或单个查询时,Lucid 会发出db:query事件。

你可以通过在config/database.ts文件中将debug标志设置为true来启用全局调试。

{
  client: 'pg',
  connection: {},
  debug: true, // 👈
}

你可以使用查询生成器上的debug方法为单个查询启用调试。

// title: Select
Database
  .query()
  .select('*')
  .debug(true) // 👈
// title: Insert
Database
  .insertQuery()
  .debug(true) // 👈
  .insert({})
// title: Raw
Database
  .rawQuery('select * from users')
  .debug(true) // 👈

监听事件

启用调试后,你可以使用 Event 模块侦听db:query事件。

// title: start/events.ts
import Event from '@ioc:Adonis/Core/Event'

Event.on('db:query', function ({ sql, bindings }) {
  console.log(sql, bindings)
})

漂亮的打印查询

你可以使用Database.prettyPrint方法作为事件侦听器在控制台上漂亮地打印查询。

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

Event.on('db:query', Database.prettyPrint)

生产调试

漂亮的打印查询会增加流程的额外开销,并可能影响应用程序的性能。因此,我们建议使用 Logger 在生产期间记录数据库查询。

下面是一个根据应用环境切换事件监听器的完整示例。

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

import Logger from '@ioc:Adonis/Core/Logger'
import Application from '@ioc:Adonis/Core/Application'

Event.on('db:query', (query) => {
  if (Application.inProduction) {
    Logger.debug(query)    
  } else {
    Database.prettyPrint(query)
  }
})

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/adonisjs/5.x/da...

译文地址:https://learnku.com/docs/adonisjs/5.x/da...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~