当前位置: 首页 > 知识库问答 >
问题:

处理Knex pg数据库错误的正确方法是什么

耿炎彬
2023-03-14

我正在使用带有knex javascript库的postgres来构建我的sql查询。我想要处理所有从postgres服务器抛出的错误,所以我想要这样做的方式是通过检查抛出错误的类型。

try {
   // knex query here
} catch(error) {
    if(error instanceof DatabaseError) {
      // handle pg error by checking error.code or something else
      // then send an custom error message to the client
    }

    // handle another error here which is not caused by the postgres server
}

有没有办法处理这样的错误?

共有1个答案

简成仁
2023-03-14

可以使用Async/Await语法:

async function() {
    try {
       await knex(/* knex query here*/)
    } catch(error) {
        if(error instanceof DatabaseError) {
          // handle pg error by checking error.code or something else
          // then send an custom error message to the client
        }

        // handle another error here which is not caused by the postgres server
    }

如果由于某种原因不想使用那个(较新的)语法,也可以将.catch...

knex(/* knex query here*/)
    .then(doWhatever)
    .catch(error => {
         if(error instanceof DatabaseError) { // ...
    });

另外,您还可以使用Knex的query-error(https://knexjs.org/#interfaces-query-error)...但我个人从来没有看到内置的promise处理程序能够正常工作的意义。

编辑:重读你的帖子后,我想我可能读错了,你的重点可能是“我如何区分PG错误和Knex错误?”。在这种情况下,您可以挂起特定于PG的错误处理程序,如下所示:

function afterCreate(connection, callback) {
  connection.on("error", connectionError);
  callback(null, connection);
}

db.client.pool.config.afterCreate = afterCreate;

如果这样做,就不需要error instanceof databaseerror,因为connection.on捕获的所有错误都将是PG错误。

您可能还会发现这个问题线程(我从那里获得了这些代码)很有用:https://github.com/KNex/KNex/issues/522,因为它讨论了KNex中的错误处理,特别是底层DB错误的处理。

 类似资料:
  • 问题内容: 我一直在使用spring-webflux进行一些研究,我想了解使用路由器功能处理错误的正确方法。 我创建了一个小项目来测试几个场景,并且我希望获得有关它的反馈,并查看其他人在做什么。 到目前为止,我在做什么。 提供以下路由功能: 我已经在我的处理程序上执行了 它们是我的错误处理程序: 这是完整的示例存储库: https://github.com/LearningByExample/re

  • 问题内容: 在PHP系统中,我有一个常见的MVC情况:从包含的数据中接收请求。现在,我有三种方法来处理数据: a)仅调用和处理数据。 b)在变换的数据转换成变量,并将它们传递到。 c)将数据转换为的域对象,并将该对象仅传递给。 目前,我正在使用选项A,但是我认为这是错误的,因此我正在考虑使用选项C。 因此,根据MVC,处理数据的正确方法是什么? 编辑 目前,我没有使用任何MVC框架。 编辑2 通常

  • 问题内容: 我使用10gen的本机node.js驱动器将mongodb(2.2.2)与node.js一起使用。 起初一切顺利。但是当涉及到并发基准测试部分时,会发生很多错误。频繁进行1000次并发连接/关闭可能会导致mongodb拒绝任何进一步的请求,并出现以下错误: 另外,如果许多客户端在没有显式关闭的情况下关闭,则mongodb将花费几分钟的时间来检测并关闭它们。这也将导致类似的连接问题。(使

  • 我试试看。js与mongodb(2.2.2)一起使用本机节点。js drive by 10gen。 起初一切都很顺利。但在并发基准测试部分,出现了很多错误。频繁连接/关闭1000次并发可能会导致mongodb拒绝任何进一步的请求,错误如下: 此外,如果很多客户端在没有显式关闭的情况下关闭,mongodb需要几分钟来检测并关闭它们。这也会导致类似的连接问题。(使用/var/log/mongodb/m

  • 问题内容: 我遇到这种情况,我需要将a解析为an ,但我不知道该如何处理。当我没有抓住它时,编译器不会抱怨,但是我只是想确保自己能够正确处理这种情况。 我只想这样简化我的代码。编译器没有问题,但是线程在上死掉了。 Google CodePro希望我以某种方式记录该异常,并且我同意这是最佳实践。 我希望当当前片段不是数字或无法解析时返回此方法。当我没有显式捕获时,是否不分配变量?还是有一些默认值返回

  • 我有两个图像,一个是竖屏,另一个是横向模式。当移动设备视图旋转时,切换这些图像的最佳方式是什么? 目前我只显示肖像图像。当设备旋转到横向模式时,纵向图像只需拉伸即可。 我是否应该在方向旋转处理程序中进行检查,并简单地将图像重置为正确的方向图像(即根据方向手动设置)?? 谢谢