You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在服务器端正确处理错误?

如何在服务器端正确处理错误?

我们来逐个分析你给出的三种写法:

第一种写法

if (!user) throw Error("User does not exist");

这种直接抛出错误的方式风险很高:如果服务器没有配置全局错误捕获逻辑,未捕获的错误会导致进程崩溃,或者返回给前端默认的500(服务器内部错误)响应,前端无法明确具体错误原因。而且生产环境下直接抛出原生Error,可能泄露服务器内部细节,同时也没法自定义对应HTTP状态码。

第二种写法

if (!user) {
 return res.status(400).json({
  msg: "User does not exist"
 })
}

这是比较规范的正确写法:

  • 用return确保发送响应后终止后续代码执行,避免重复响应的问题
  • 设置了明确的HTTP状态码400(如果是用户不存在这类资源找不到的场景,用404状态码会更语义化)
  • 返回结构化的JSON响应,前端能清晰解析错误信息
  • 修正了原代码中msg值未加引号的语法问题

第三种写法

if (!user) {
 res.status(400).json({msg: "User does not exist"})
}

这个写法存在明显隐患:没有加return,如果当前代码块后面还有其他逻辑(比如继续处理请求、发送其他响应),会触发"Cannot set headers after they are sent to the client"的错误——因为HTTP响应已经发送过一次,没法再修改头部或发送新响应。

总结正确的错误处理原则

  • 发送错误响应时必须用return终止后续逻辑,避免重复响应
  • 给错误信息添加正确的引号,保证代码语法合法
  • 根据错误场景选择合适的HTTP状态码:资源不存在用404,请求参数错误用400,权限不足用403等
  • 如果偏好使用错误抛出的方式,必须配置全局错误捕获中间件(比如Express的错误处理中间件),统一捕获错误并返回标准化的响应,避免进程崩溃

内容的提问来源于stack exchange,提问作者Butonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:50:03