【发布时间】: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 之间的库版本组合问题有关。我将它们中的每一个都更新到了最新版本以运行更多测试。我不知道。我真的没有想法。