gpt4 book ai didi

node.js - 在 REST 应用程序中处理数据库错误时,什么被视为标准?

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:41 26 4
gpt4 key购买 nike

我目前正在 Node.js 中编写一个公共(public) REST 服务,该服务与 Postgres 数据库(使用 Sequelize)和 Redis 缓存实例交互。我现在正在研究错误处理以及如何在请求发生某些情况时发送信息丰富且详细的错误消息。

令我震惊的是,我不太确定如何处理内部服务器错误。处理这个问题的适当方法是什么?考虑以下场景:

我正在向端点发送后请求,​​该端点又将内容插入到数据库中。然而,在此过程中出现了一些问题(验证、连接问题等等)。 Sequelize 驱动程序抛出一个错误,我发现了它。

我认为这是非常敏感的信息(即使我删除了堆栈跟踪),而且我不愿意向客户端公开内部概念(表名、函数等)的引用。我希望为这些场景提供一个自定义错误,该错误可以简要描述问题,但不会透露太详细的信息。

解决这个问题的唯一方法是将 Sequelize 驱动程序中的每个“可能”错误映射到通用错误并将其发送回客户端吗?或者你会如何处理这个问题?

提前致谢。

最佳答案

错误总是由某些原因引起的。在进行数据库操作之前,您应该识别并拦截这些原因。只有您认为已经准备好的情况才应该进行数据库操作。

如果发生意外错误,出于安全原因,您不应发送信息性错误消息。只需针对意外情况发送一般错误即可。

你的代码看起来有点像这样:

async databaseInsert(req, res) {
try {
if (typeof req.body.name !== 'string') {
res.status(400).send('Required field "name" was missing or malformed.')
return
}
if (problemCase2) {
res.status(400).send('Error message 2')
return
}
...
result = await ... // database operation
res.status(200).send(result)
} catch (e) {
res.status(500).send(debugging ? e : 'Unexpected error')
}
}

关于node.js - 在 REST 应用程序中处理数据库错误时,什么被视为标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com