javascript - 从玩笑中获取正确的堆栈跟踪
问题描述
我目前正在调试一些用 jest over typescript 编写的测试,我有点头疼。
如果测试或测试类运行 Postgres SQL 并且查询中有错误,我会得到错误的堆栈跟踪,例如:
error: invalid input syntax for type integer: ""0""
at Parser.parseErrorMessage (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/parser.ts:369:69)
at Parser.handlePacket (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/parser.ts:188:21)
at Parser.parse (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/parser.ts:103:30)
at Socket.<anonymous> (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/index.ts:7:48)
at Socket.emit (node:events:365:28)
at addChunk (node:internal/streams/readable:314:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Socket.Readable.push (node:internal/streams/readable:228:10)
at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
“错误”行非常有用,但是,堆栈跟踪只告诉我错误是由 pg-protocol 驱动程序引发的。我想知道我的代码中的哪一行产生了错误。
我有 82.7% 的把握确定这是因为 PGquery
是异步的。
console.log
当只需要显示正确的调用堆栈以使其变得更好时,不得不逐步调试或(喘气)我的方式来处理每个错误是非常耗时的。
有没有人找到让这个开发人员友好的方法?
解决方案
检查这是否与brianc/node-postgres
问题 2484有关
当您从解析器返回语法错误时,是否(有)首选的包、扩展或方法来提供更多详细信息?
(例如,列出行号、错误列的一个)例如,现在:
error: syntax error at or near "as" at Parser.parseErrorMessage (/home/collspec/projects/staff-portal/sprint-server/node_modules/pg-protocol/dist/parser.js:278:15)
期望的行为:
error: syntax error at or near "as", line 5, column 7 at Parser.parseErrorMessage (/home/collspec/projects/staff-portal/sprint-server/node_modules/pg-protocol/dist/parser.js:278:15)
驱动程序填充的错误对象上有一堆附加字段。
如果您记录错误对象,您可以看到它们。它们对应于服务器返回的错误字段:例如使用命令:
SELECT foo FROM bar
你会得到这样的错误:
{ length: 102, severity: 'ERROR', code: '42P01', detail: undefined, hint: undefined, position: '17', internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'parse_relation.c', line: '1180', routine: 'parserOpenTable' }
你想要的是位置。它为您提供错误 SQL 中的字符偏移量。
在本例中,位置值“17”指的是 SQL 中柱形标记的开始。
它并不总是被填充,因为它取决于导致错误的原因(通常只是解析错误)。
推荐阅读
- python - 如何在python中将年、月、日转换为只有年?
- javascript - 用javascript在二维数组周围创建填充的最佳方法是什么
- regex - 正则表达式查找包含行之间的另一个字符串的多行字符串
- c++ - 函数式编程中的迭代器
- c++ - 计算文本文件中的单词,C++
- c - C中的奇怪打印问题
- apache-spark - 为什么我的 Spark Structured Streaming 作业不能批量写入 JDBC?
- javascript - 我对 LeetCode 问题的解决方案运行良好,直到我尝试通过使用辅助函数来改进它。没有返回参数
- react-native - react-native-reanimated:onChange 不是函数
- matlab - 矩阵乘以极坐标形式的数据?