更新:似乎Node.jsv10到14.15.0在堆栈跟踪方面存在一些错误。我的问题在更新到14.16.1后得到解决。在这里查看的一些相关问题
复制此问题的小型项目:https://github.com/babaliaris/nestjs-error-context-problem
这是堆栈跟踪中没有提到的行
我有一个调用执行,如下所示:
1) users.controller.ts calls await insert(table_name, query, data) inside a try-catch block.
2) mysql.service.ts implements the insert() method which calls
3) mysql.query() an npm module that rejects a promise due to a non-existing table name.
我得到的堆栈跟踪如下:
[Nest] 31018 - 05/08/2021, 6:55:20 PM [POST /api/users] Internal Error +20932ms
Error: ER_NO_SUCH_TABLE: Table 'agro_ajenda_test.t_user' doesn't exist
at Query.Sequence._packetToError (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
at Query.ErrorPacket (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
at Protocol._parsePacket (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/protocol/Protocol.js:291:23)
at Parser._parsePacket (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/protocol/Parser.js:433:10)
at Parser.write (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/protocol/Parser.js:43:10)
at Protocol.write (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/protocol/Protocol.js:38:16)
at Socket.<anonymous> (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/Connection.js:88:28)
at Socket.<anonymous> (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/Connection.js:526:10)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
--------------------
at Protocol._enqueue (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Connection.query (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/node_modules/mysql/lib/Connection.js:198:25)
at connect.then (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/dist/services/mysql/mysql.service.js:27:22)
at process._tickCallback (internal/process/next_tick.js:68:7)
最后一个上下文是
at process._tickCallback (internal/process/next_tick.js:68:7)
但它应该是类似的东西
at insert() (/home/babaliaris/Development/web/nestjs/agro-ajenda-backend/dist/controllers/users/users.controller.js:27:22)
出于某种原因,它不会告诉我在哪里捕获错误,但堆栈停止了在过程中_tickCalback
其他mysql.MysqlError(如ER_BAD_DB_ERROR(包含来自users.controller.js文件的调用,但ER_NO_SUCH_TABLE不包含!
发生了什么事?
更新
这个错误存在于节点v10.24.0
上,将节点升级到12+
可以解决它
我有不同的结果,正如我在评论中所说的。因此,我检查了不同的节点版本,发现v10没有正确处理错误,并返回了您提到的相同错误。
请问您是否正在使用节点10?
如果是,您可以尝试下一个LTSnode 12
或latest node 16
,看看问题是否已经解决。