javascript - knex - 链接语句

标签 javascript knex.js

我很好奇如何knex有效,因为它看起来很流畅,而 sql更有条理。最终knex转译为 sql或任何数据库引擎。
问题

  • 链接方法以不断解决 promise 是否更好?
    前任:
    knex('table').select('wire').limit(1).then((row)=>{
     if(row){
       knex('table2').update()... (1)
     }
     throw new Error('Nothing')
    }).then(r=>{
       knex('tablw')..... (2)
    })
    ....
    catch(e=>{
       ....
    })
    

  • 还是在 knex 中创建交易?
  • knex 何时实际查询数据库?是否只有在所有 promise 都得到解决后才会发生?或者是在每个 knex() 调用数据库陈述?

  • 我找不到任何关于它如何实际调用/查询数据库的文档。
    乍一看,好像每个knex()语句将调用数据库(在我的示例中,它将是三个不同的时间?)这意味着创建事务将比所有这些小查询/调用好 1000%
    谢谢一堆!

    最佳答案

    很好的问题,这里有一些答案:

  • 这取决于您的需要,事务不是查询聚合器,而是一种机制,它允许您使用多个查询来查询数据库,这将保证它们将作为一个查询运行。
    例如,当您需要在多个表中进行多次更改时,如果其中一个失败,则执行其他表将毫无意义。
    典型的例子是一个银行应用程序,你应该从一个用户那里拿钱并将其添加到另一个用户。
    如果第一个操作(取钱)成功但第二个操作失败,则您的系统处于未知状态。
    为了防止这种情况,您在事务中运行它们,如果有任何失败,数据库将回滚该操作。

  • 小提示,利用async/await语法,它将使您的代码更具可读性。
  • Knex 是一个查询构建器,它遵循 Builder design pattern ,这意味着所有方法都在其中“累积”,一旦您调用 then它构建查询并将其传递给数据库的方法。
    你可以测试一下,建一个select查询并且不要调用“then”,它不会在数据库上执行任何查询。
  • 关于javascript - knex - 链接语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63867607/

    相关文章:

    javascript - php 提交时显示警报而不加载操作链接

    javascript - Css 箭头指向内容选项卡框

    javascript for循环内IF语句中的多个AND条件

    javascript - 如何将 2 个 postgres 数据库连接到我的应用程序?

    node.js - 在配置数据库时连接详细信息不可用 Digital Ocean

    javascript - 无法从nodejs应用程序连接远程mysql

    javascript - meteor 事实包什么也没显示,如果我包含事实基础,我会得到 "Ignoring duplicate publish"

    javascript - 无法捕获 knex 交易拒绝

    node.js - 如何检查给定查询是否在 knex 中返回任何结果

    javascript - 如何更改 knex 中的总和值