【问题标题】:TypeORM insert doesn't work with big numberTypeORM 插入不适用于大数字
【发布时间】:2021-06-08 21:22:51
【问题描述】:

我在一个项目中使用 TypeORM,我遇到了一个我以前从未见过的问题。

我正在从我的 Postman 向我的后端 API 发送一个包含一些值的对象。例如:{ n1: 999, n2: 999 }。 一切正常,直到上周三前端发送了一个更长的号码:9999999999。

现在发生的情况是,由于没有将对象插入数据库,因此请求一直处于挂起状态。 保持请求待处理的命令如下:

const result = await this.myRepo.insert(myObject);

myObject 是一个 TypeORM 实体。

它不会抛出任何错误或任何东西,这个插入命令也没什么大不了的。这是一个简单的插入。

运行一些测试,我发现插入了 5555555555(50 亿)之前的数字,但高于此的数字,它不起作用。数据库 (Oracle) 确实接受这些长数字。证明是我能够在原始 SQL 命令中插入 9999999999(90 亿)(这就是为什么我认为可能与 TypeORM 有关)

有人知道发生了什么吗?有什么提示可以让我继续寻找答案吗?我们没有想法。

编辑 1:我将上面的方法更改为下面的方法:

 const insertStatement = this
  .sauFtPagamentoBaseRepository
  .createQueryBuilder()
  .insert()
  .into(SauFtPagamentoBase)
  .values([pagamentoBase]);

这样做我可以这样称呼:

const queryAndParameters = insertStatement.getQueryAndParameters();

queryAndParameters的日志是TypeORM生成的插入脚本。我尝试通过复制和粘贴在我的 DBeaver 中运行脚本,它运行成功。

编辑 2:我让待处理的请求结束。它在控制台中显示“分段错误”消息(我不知道这是什么意思,但我正在互联网上寻找)

【问题讨论】:

  • 计算出每一层传递给下一层的内容。什么被传递给 node-oracledb (我希望你正在使用它)?如果有的话,传递给数据库的 node-oracledb 是什么?如果您没有调试器,请在各种文件中添加一些 console.log() 转储。另见oracle.github.io/node-oracledb/doc/api.html#tracingsql
  • 您好@ChristopherJones,感谢您的回答!我正在使用每一层中的日志来跟踪对象(您可以在此处查看日志:[link]github.com/FilipeVeber/stackoverflow-question/blob/main/…我们在所有微服务中都使用以下 oracle 库:[link]npmjs.com/package/oracledb 谢谢您的链接!我会阅读,看看是否能找到任何有用的东西。
  • @CristopherJones 我用我运行的一些测试编辑了这篇文章。希望它以任何方式有所帮助。我想知道是否可能与 Node、oracledb 和 typeorm 之间的库版本组合问题有关。我将它们中的每一个都更新到了最新版本以运行更多测试。我不知道。我真的没有想法。

标签: node.js oracle typeorm


【解决方案1】:

我们找到了问题所在。我们不必将值作为整数传递,而是将它们作为字符串传递,因为这是从 TypeORM 到 oracle db 层的一种转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多