在fastify + posterre上编写后端时遇到了一个小问题。我在一个网站上有一个用户注册功能,它在引擎盖下向Posterre提供数据。我现在正在优化错误处理,但遇到了一个问题。我想从对象“err”中获取数据。
在我的例子中,对象“err”看起来像这样:
err: {
"type": "DatabaseError",
"message": "duplicate key value violates unique constraint \"users_login_key\"",
"stack":
error: duplicate key value violates unique constraint "users_login_key"
at C:\Users\galec\Dev\Lottery\backend-lottery\node_modules\pg\lib\client.js:526:17
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async file:///C:/Users/galec/Dev/Lottery/backend-lottery/src/routes/register.js:46:13
"length": 202,
"name": "error",
"severity": "ERROR",
"code": "23505",
"detail": "Key (login)=(alaverdyan) already exists.",
"schema": "public",
"table": "users",
"constraint": "users_login_key",
"file": "nbtinsert.c",
"line": "649",
"routine": "_bt_check_unique"
}
字符串
将新用户事务处理到Posterre表“users”中时发生错误。原则上这并不重要,因为我是故意造成错误的,但为了以防万一,我会给予你一段函数代码:
try {
// database transaction logic
} catch (err) {
app.log.error({
msg: `Error adding user '${login}' to table 'users'`,
'Error code': err.code,
'Error type': err.type,
'Message': err.message,
'Detail': err.detail,
'DB table': err.table,
'DB constraint': err.constraint,
'Stack': err.stack,
})
}
型
我最终得到一个缺少类型字段的对象:
的数据
还不止这些。如果我们调用下面的命令,我们会得到一个有趣的结果。
app.log.error(err) // will output an 'err' object with a 'type' field
app.log.error({ err: err }) // will output an 'err' object with a 'type' field
app.log.error({ error: err }) // prints the 'err' object without the fields 'type ', 'message' and 'stack'
型
屏幕截图:app.log.error(err)、app.log.error({ err: err })、app.log.error({ error: err })的一个或多个。
我做了一期皮诺·吉塔布的事。我还没有回答。
会有什么问题呢?为什么我无法访问错误类型?
1条答案
按热度按时间z4bn682m1#
下面是完整的解释。
首先,重复问题:
字符串
然后我意识到
DatabaseError
没有任何type
prop :型
pg
源代码证实了这一点通过阅读构造函数名称,实现
pino
与type
的相加:的数据
会有什么问题呢?为什么我无法访问错误类型?
因此,要在
err
和error
之间获得相同的输出,您需要更新serialzier
选项:型
要读取
type
,您需要编写以下命令:型