javascript - 使用 Node/Express 正确处理错误

标签 javascript node.js express

一般来说,服务器(node/express)返回错误并拒绝 promise 的正确方法是什么?

<小时/>

A) 像这样:res.json({status: 1, message: '测试丢失的手机。', error: 'phone'})

然后从前端的 error 中提取错误“code”,并从 messsage 中提取消息,从而产生具有 的已履行 promise 错误和其中的消息

<小时/>

B) 像这样;

res.status(500)
res.json({message: 'Test missing phone.'})

然后只需拉出消息并使用该消息调用.reject即可。或者 res.error 之类的。

<小时/>

其中任何一个都会导致“拒绝” promise 或“错误”回调,从而使前端工作变得更容易吗?

当我收到错误时,我是否应该导致 promise /回调拒绝,或者只是发送一个已完成的 promise ,并在对象中出现错误,例如 A

以下哪一项是将错误从服务器返回到前端的“正确”方法?

目前我使用方法 A,但它看起来很愚蠢,因为我必须处理错误两次,后端(实际发送自定义错误)和前端(检查已履行的 promise 是否有错误对象,然后显示弹出窗口)。方法 B 将消除“检查已履行的 Promise 是否有错误对象”部分,因为被拒绝的 Promise 本质上就是一个错误。

编辑:我使用 React Native 作为前端。

EDIT2:如果您在后端res.status(500).json({test: '测试丢失的手机。'}),您可以console.log(error.response. data) 在前端使“B”成为一个可行的选择。

最佳答案

TL;DR 使用“B”方法

取决于您在前端使用的内容。如果它是 Angular 并且您正在使用 $http例如,如果根据 the docs 出现错误状态(例如 400 状态代码),则 Promise 将被拒绝。 .

因此,为了让前端自动“知道”何时出现错误(而不必进行一些额外的检查来查看正文是否包含错误消息),您可能应该使用 res.status()后端的方法。 HTTP 状态代码是您的前端应该使用的模型,以了解服务器中发生的情况,并且大多数前端 HTTP 库都是根据此模型构建的。

如果您愿意,您也可以在回复正文中发送其他信息。您可以在前端使用自定义应用程序代码来处理更精细的错误情况。例如,状态 401 会告诉客户端他们无权在服务器上执行某些操作,并且正文带有 code成员可能会进一步准确定义问题是什么,以及一些人类可读的描述(在您的示例中已经有 message )。

关于javascript - 使用 Node/Express 正确处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080365/

相关文章:

javascript - MongooseJS findOne() 的意外结果

c# webclient NetworkCredentials 在 Nodejs 中

javascript - 如何在 MySQL 查询中传递 Javascript 变量

javascript - req.body 始终未定义

javascript - Electron ipcRenderer 与 ipcMain 同步

在不使用外部代码的情况下仅运行其部分代码一次的 Javascript 函数

javascript - 即使相对位置也将元素设置为特殊坐标?

javascript - 尝试导入错误: 'SelectionPage' is not exported from './components/SelectionPage'

javascript - 在 Node/Express 中散列、加盐并保存密码

javascript - 为什么在 Node js 中到处使用异步函数是最佳实践