Estou usando bookshelf-> knex-> pg e preciso me aprofundar em algumas das consultas SQL que estão sendo geradas. Eu gostaria de ver as saídas toString()
para cada consulta que passa pelo knex, ou seja, sem $ 1, $ 2 etc. Existe uma maneira de habilitar isso sem um patch monkey ou um patch que pode fazer isso de forma simples?
Você pode ouvir o evento de consulta de sua instância knex
e, em seguida, interpolar as ligações:
var bindingRegex = /\?/g;
knexInstance.on('query', function (query) {
var params = query.bindings.slice();
var q = query.sql.replace(bindingRegex, function () {
return params.unshift();
});
console.log(new Date().toISOString(), '\n', q, '\n');
});
É isso que você está procurando?
A depuração está no topo da lista de prioridades das coisas que precisam ser trabalhadas.
Atualmente, estou trabalhando na reformulação de muitos componentes internos do knex & bookshelf para tornar as coisas muito mais simples, com ênfase na depuração e na geração robusta de consultas. Deve ver algumas coisas novas que tornam isso disponível sem patches temporários aparecendo nos próximos um ou dois meses,
O snippet @johanneslumpe compartilhado definitivamente deve ajudar nesse meio tempo
Olá, e obrigado pelas respostas rápidas e positivas. Para sua informação, modifiquei um pouco para corrigir um erro de digitação e torná-lo copiável e colável:
knexInstance.on('query', function (query) {
var params = query.bindings.slice();
var q = query.sql.replace(/\?/g, function () {
return '\'' + params.shift() + '\'';
});
console.log(new Date().toISOString(), '\n', q, '\n');
});
Comentários muito úteis
Olá, e obrigado pelas respostas rápidas e positivas. Para sua informação, modifiquei um pouco para corrigir um erro de digitação e torná-lo copiável e colável: