我遇到了一个问题,即无法从 Node-Postgres NPM 包中捕获错误。
这个问题表面上似乎很简单,但是我已经尝试了我能想到的一切方法。
我的代码如下:
import { Pool } from 'pg' // Import postgres connection pool
const pgPool = new Pool()
async function queryDatabase() {
try {
// Force TypeError by passing undefined
let queryResult = await pgPool.query( undefined )
if ( queryResult.rows.length > 0 ) {
return queryResult.rows[0]
}
return false
} catch( err ) {
// Never Reached
return new Error( 'Test error' )
}
}
queryDatabase()
错误如下:
TypeError: 客户端传递了一个空的或未定义的查询
at Client.query (~/.../node_modules/pg/lib/client.js:479:11)
这个错误本身已经很明显了。为了试图处理由于误传 undefined
而产生的错误,我在这里强制出错。我知道我可以简单地检查以确保输入永远不会是 null 或 undefined,但那不是我的主要关注点。
我的担心是,如果我无法捕获从这个包抛出的错误,那么我将遇到多少其他未预料到的情况,我根本无法捕获和处理所抛出的错误。
我尝试了许多不同的方法 - 上面展示的 Async/Await
Try/Catch
方法,我尝试了 pgPool.query().then().catch()
,两者的组合。我甚至尝试对 Pool 实例本身运行 catch。无论我做什么,都无法处理异常,除非使用 Node 的 process.on('unhandledRejection', ...)
,这当然是个坏主意。
我已经头疼了几个小时了。有没有办法捕获和处理这样的错误,使其不会每次崩溃我的服务器?提前感谢!
undefined
导致上述代码无法捕获的异常,那就是一个 bug。请确保您拥有最新版本的pg
,然后在 GitHub 上报告此问题。 - Bergi