数据查询 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)
}
})
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。