Knex: toString-Debugging bei Verwendung von Bookshelf

Erstellt am 30. Dez. 2014  ·  3Kommentare  ·  Quelle: knex/knex

Ich verwende bookshelf-> knex-> pg und muss mich eingehender mit einigen der generierten SQL-Abfragen befassen. Ich würde gerne die toString() Ausgaben für jede Abfrage sehen, die durch knex geht, dh ohne $ 1, $ 2 usw. Gibt es eine Möglichkeit, dies ohne einen Affen-Patch zu aktivieren, oder einen Patch, der dies einfach kann?

question

Hilfreichster Kommentar

Hallo, und danke für die schnellen und positiven Antworten. Zu Ihrer Information Ich habe dies ein wenig geändert, um einen Tippfehler zu korrigieren und ihn kopierbar und einfügbar zu machen:

  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');
  });

Alle 3 Kommentare

Sie können das Abfrageereignis Ihrer knex -Instanz abhören und dann die Bindungen interpolieren:

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');
});

Suchst du danach?

Das Debuggen steht ganz oben auf der Prioritätenliste der Dinge, die Arbeit benötigen.

Ich arbeite derzeit daran, viele Interna von knex & bookshelf umzurüsten, um die Dinge viel einfacher zu machen, wobei der Schwerpunkt auf dem Debuggen und der robusten Abfragegenerierung liegt. Sollte es einige neue Dinge geben, die dies verfügbar machen, ohne dass in den nächsten ein oder zwei Monaten temporäre Patches auftauchen,

Das geteilte Snippet @johanneslumpe sollte in der Zwischenzeit definitiv helfen

Hallo, und danke für die schnellen und positiven Antworten. Zu Ihrer Information Ich habe dies ein wenig geändert, um einen Tippfehler zu korrigieren und ihn kopierbar und einfügbar zu machen:

  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');
  });
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen