为什么NestJS mysql查询错误不包含所有执行上下文,而是在进程中停止_tickCalback



更新:似乎Node.jsv1014.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 12latest node 16,看看问题是否已经解决。

最新更新