Knex: 使用书架时进行toString调试

创建于 2014-12-30  ·  3评论  ·  资料来源: knex/knex

我正在使用bookshelf-> knex-> pg,需要更深入地研究正在生成的一些SQL查询。 我想看到每个通过knex的查询的toString()输出,即没有任何$ 1,$ 2等。是否有没有猴子补丁或简单的补丁就可以启用此功能的方法?

question

最有用的评论

嗨,谢谢您的迅速而积极的回应。 仅供参考,我对此进行了一些修改,以纠正输入错误,并使其可复制并粘贴:

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

所有3条评论

您可以侦听knex实例的查询事件,然后插值绑定:

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

这是你想要的?

在需要处理的事情的优先级列表上,调试非常重要。

我目前正在重新整理knex和书架的许多内部组件,以简化调试工作,并着重于生成可靠的查询,从而使事情变得简单得多。 应该会看到一些使此功能可用的新功能,而在下一两个月内不会出现临时补丁,

在此期间,共享的@johanneslumpe片段肯定会有所帮助

嗨,谢谢您的迅速而积极的回应。 仅供参考,我对此进行了一些修改,以纠正输入错误,并使其可复制并粘贴:

  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');
  });
此页面是否有帮助?
0 / 5 - 0 等级