Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有没有办法让KNEX错误也记录在代码中发生的位置?_Mysql_Node.js_Knex.js - Fatal编程技术网

Mysql 有没有办法让KNEX错误也记录在代码中发生的位置?

Mysql 有没有办法让KNEX错误也记录在代码中发生的位置?,mysql,node.js,knex.js,Mysql,Node.js,Knex.js,有些Knex错误会记录发生错误的文件和行,但许多错误不会记录。这使得调试变得不必要的单调乏味。.catch((err)=>{console.log(err)})应该处理这个问题吗? 事实上,代码尝试重复大约4次(我希望它尝试一次并停止,绝对不需要更多的尝试,永远-它只会在进一步输入数据库时把事情搞砸) 有些Knex错误会记录发生错误的文件和行,但许多错误不会记录 你能给我们一些能消除错误的查询示例吗 async function repeatInsert(retryTimes = 0) {

有些Knex错误会记录发生错误的文件和行,但许多错误不会记录。这使得调试变得不必要的单调乏味。
.catch((err)=>{console.log(err)})
应该处理这个问题吗? 事实上,代码尝试重复大约4次(我希望它尝试一次并停止,绝对不需要更多的尝试,永远-它只会在进一步输入数据库时把事情搞砸)

有些Knex错误会记录发生错误的文件和行,但许多错误不会记录

你能给我们一些能消除错误的查询示例吗

async function repeatInsert(retryTimes = 0) {  
  try {
    await knex.insert().into();
  } catch(err) {
    // handle known error
    if (err.isKnown) {
      throw err;
    }
    // and retry
    if (retryTimes < 4) {
      return await repeatInsert(retryTimes + 1);
    }
  }
}
我是Knex的忠实用户,在我的开发过程中,几乎所有的错误都会显示它们发生的文件和行,除非有两种情况:

  • 可能提前完成的事务中的查询 在这种情况下,我们必须自定义knex内部catch逻辑并执行一些knex注入,例如
    Runner.prototype.query
    ,识别TransactionArlyCompletedError,并记录更多信息:
    sql
    绑定
    on catch子句

  • 池连接错误
  • 例如mysql错误:
    Knex:error Pool2-error:Pool.release():资源不是池的成员

    这是另一个取决于数据库环境和连接包的问题

    事实上,代码尝试重复大约4次

  • 如果你重复使用Promise chain编写的代码,我认为它不会抛出4次,它应该在第一次抛出时爆炸
  • 并发执行的查询
  • 如果数组中的任何承诺被拒绝,或者映射器函数返回的任何承诺被拒绝,那么返回的承诺也会被拒绝

  • 如果使用
    尝试catch
    异步等待
  • 但是它不会重复4次,如果您已经知道错误类型,同时,如果您不知道会抛出什么错误,为什么不只执行一次以找出错误

    async function repeatInsert(retryTimes = 0) {  
      try {
        await knex.insert().into();
      } catch(err) {
        // handle known error
        if (err.isKnown) {
          throw err;
        }
        // and retry
        if (retryTimes < 4) {
          return await repeatInsert(retryTimes + 1);
        }
      }
    }
    
    异步函数repeatInsert(retryTimes=0){ 试一试{ 等待knex.insert().into(); }捕捉(错误){ //处理已知错误 如果(错误已知){ 犯错误; } //然后重试 如果(重试次数<4){ 返回等待重复插入(retryTimes+1); } } }
    async function repeatInsert(retryTimes = 0) {  
      try {
        await knex.insert().into();
      } catch(err) {
        // handle known error
        if (err.isKnown) {
          throw err;
        }
        // and retry
        if (retryTimes < 4) {
          return await repeatInsert(retryTimes + 1);
        }
      }
    }