Depuração
O Lucid emite o evento db:query
quando a depuração é habilitada globalmente ou para uma consulta individual.
Você pode habilitar a depuração globalmente definindo o sinalizador debug
como true
dentro do arquivo config/database.ts
.
{
client: 'pg',
connection: {},
debug: true, // 👈
}
Você pode habilitar a depuração para uma consulta individual usando o método debug
no construtor de consultas.
Database
.query()
.select('*')
.debug(true) // 👈
Database
.insertQuery()
.debug(true) // 👈
.insert({})
Database
.rawQuery('select * from users')
.debug(true) // 👈
Ouvindo o evento
Depois de habilitar a depuração, você pode ouvir o evento db:query
usando o módulo Event.
// start/events.ts
import Event from '@ioc:Adonis/Core/Event'
Event.on('db:query', function ({ sql, bindings }) {
console.log(sql, bindings)
})
Consultas de impressão bonita
Você pode usar o método Database.prettyPrint
como o ouvinte de eventos para imprimir as consultas no console.
import Event from '@ioc:Adonis/Core/Event'
import Database from '@ioc:Adonis/Lucid/Database'
Event.on('db:query', Database.prettyPrint)
Depuração em produção
Consultas de impressão bonita adicionam sobrecarga adicional ao processo e podem impactar o desempenho do seu aplicativo. Portanto, recomendamos usar o Logger para registrar as consultas do banco de dados durante a produção.
A seguir está um exemplo completo de como alternar o ouvinte de eventos com base no ambiente do aplicativo.
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)
}
})