尝试{} catch(){}无法捕获NodeJS异常

时间:2020-10-25 14:14:11

标签: javascript mysql node.js express exception

我最近不时注意到,我的服务有时不时出现故障(并重新启动)。 今天,我在开发环境中实现了它,显然mysql execute调用中的异常不是被try catch捕获的,而是冒泡并“杀死节点”。

代码段

import mysql = require('mysql2/promise');

    private async applyChangesToDB(compareResult:CompareResults<Product>, seller: ISellerInfo) {
        for(let addedProduct of compareResult.added)
            {
                try {
                    _.info('new product found', {product: addedProduct});
                    await this.dbPool.query(`INSERT INTO 
                        TABLE (f1, f2, f3, f4, f5, f6) 
                        VALUES (?,?,?,?,?,?)`, 
                        [A ,B, C, D, E, F]);
                }
                catch(err) {
                    _.error('failed to insert item to database', err, addedProduct);
                }
            }
    }

似乎有时A..F恰好是undefined,而mysql2不喜欢这样。 错误被打印到控制台:

\ node_modules \ mysql2 \ lib \ pool.js:177 抛出e; ^

TypeError:绑定参数不能包含未定义。要传递SQL NULL,请指定JS null 在\ node_modules \ mysql2 \ lib \ connection.js:592:17 在Array.forEach() 在PoolConnection.execute(\ node_modules \ mysql2 \ lib \ connection.js:584:22) 在\ node_modules \ mysql2 \ lib \ pool.js:172:14 在\ node_modules \ mysql2 \ lib \ pool.js:45:37 在processTicksAndRejections(内部/进程/task_queues.js:79:11) 按任意键继续 。 。

我不介意具体的错误,我已将其修复。

我的问题是无法使用catch块优雅地处理异常... 而不是意外退出。 知道为什么吗?

0 个答案:

没有答案