NodeJS和pg promise,捕获PostgreSQL异常
NodeJS and pg-promise, catch PostgreSQL exceptions
我正在使用PostgreSQL后端运行NodeJS和pg promise。我创建了自己的触发器,在某些情况下会抛出异常。事情进展顺利。
但是有了pg promise,我很难找到错误的名字。
使用此代码:
...
.catch(function(err) {
console.log(err);
});
我得到以下输出:
[ { success: false,
result:
{ [error: vote_limit_exceeded]
name: 'error',
length: 80,
severity: 'ERROR',
code: 'P0001',
detail: undefined,
hint: undefined,
position: undefined,
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'pl_exec.c',
line: '3068',
routine: 'exec_stmt_raise' } } ]
我可以在上下文中看到名称"vote_limit_exceeded",但如何作为文本字符串返回?
我尝试过"接近":
console.log(err[0].result);
但我无法隔离"vote_limit_exceeded"。
这是PostgreSQL的标准错误表示,它具有不可见的属性message
,因此调用error.message
会得到预期的结果。
最好的是这样记录你的错误:
console.log(error.message || error);
扩展您的代码示例
您的错误上下文似乎来自调用批处理函数的结果。这意味着在这种情况下,您也可以调用error.getErrors()[0]
来获得发现的第一个错误。
因此,对于您的特定情况,一个安全的错误日志记录是:
.catch(error => {
if (Array.isArray(error) && 'getErrors' in error) {
// the error came from method `batch`;
// let's log the very first error:
error = error.getErrors()[0];
}
console.log("ERROR:", error.message || error);
});
当然,您可以很容易地将其更改为记录方法批处理返回的所有错误。
这个问题让我了解了如何将属性message
添加到拒绝结果中。总有改进的余地;)
更新
在此之后,我更新了spec.batch-rejection实现,以支持属性first
和message
,从而更容易地处理错误,并将其发布为0.4.3版本。实现甚至比我最初预期的要好,因为first
和message
都支持嵌套的批处理结果。
如果您将pg-promise
更新到4.1.10版本(或更高版本),那么您可以用一种通用的方式记录此类错误:
.catch(error => {
console.log("ERROR:", error.message || error);
});
它将始终记录正确的错误消息,即使错误来自嵌套的批处理调用。
相关文章:
- 使用Express捕获参数
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 铬:“;未捕获的语法错误:意外的标记:"
- 相位器状态未捕获参考错误
- Javascript未捕获语法错误意外的标识符错误
- Wacom stu-430签名捕获速度太慢
- 未捕获的ReferenceError:$未定义
- 未捕获错误:无法在初始化之前调用方法;
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 未捕获的语法错误:意外的标记{
- "未捕获的语法错误:意外的标记}"
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 看到“;未捕获的类型错误:无法读取属性'weight'未定义的“;尽管按照字面上的指示
- 在Ajax中捕获复选框值
- 捕获初始RedQueryBuilder查询中的SQL问题
- node-webkit-从父窗口捕获iframe鼠标事件
- NodeJS和pg promise,捕获PostgreSQL异常