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

如何在NodeJS中捕获错误、自定义错误码并发送至前端避免服务崩溃

Node.js数据库操作错误处理及服务稳定性优化方案

原有代码问题梳理

  • 异步回调中直接throw err没有外层捕获,会直接触发进程崩溃
  • rows.affectedRows == 0时err为空对象,此时抛出无意义异常
  • 前后端分离场景下使用res.redirect会覆盖JSON响应,导致前端无法收到预期返回
  • 缺少入参校验逻辑,非法参数直接传入SQL会触发执行异常

1. 自定义错误码返回前端实现

前后端先约定统一响应结构,示例结构如下:

{
  code: 200, // 自定义错误码:200成功,400参数错误,404资源不存在,500服务内部错误
  msg: "操作成功", // 前端可直接展示的提示信息
  data: null // 可选,需要返回给前端的业务数据
}

根据不同的业务场景返回对应结构的JSON即可,不要混用res.redirect和res.json,重定向仅适用于页面跳转类场景,不适用于前后端分离的接口调用。

2. 避免服务器崩溃的核心方案

  • 所有异步回调中的错误禁止直接抛出,统一捕获后返回错误响应
  • 业务逻辑执行前先做入参合法性校验,拦截非法请求
  • 增加全局异常兜底捕获,避免未处理异常直接导致进程退出

修正后的完整代码示例

// 假设待删除的id从请求参数中获取,示例为req.query.id或req.body.id
const userId = req.body.users_id;
// 第一步:入参校验,拦截非法请求
if (!userId || isNaN(Number(userId))) {
  return res.json({
    code: 400,
    msg: "缺少合法的用户ID参数",
    data: null
  });
}

db.getConnection((err, connection) => {
  if (err) {
    // 数据库连接失败,返回错误不抛出
    return res.json({
      code: 500,
      msg: "数据库连接异常",
      data: null
    });
  }
  connection.query(
    "DELETE FROM users where users_id = ?",
    [userId],
    (err, rows) => {
      connection.release();
      // 先捕获SQL执行错误
      if (err) {
        return res.json({
          code: 500,
          msg: "删除操作执行失败",
          data: null
        });
      }
      // 判断是否有数据被删除
      if (rows.affectedRows == 0) {
        return res.json({
          code: 404,
          msg: "未找到对应待删除的用户",
          data: null
        });
      }
      // 操作成功返回
      res.json({
        code: 200,
        msg: "用户删除成功",
        data: {
          affectedRows: rows.affectedRows
        }
      });
      console.log("Daten gelöscht", rows.affectedRows);
    }
  );
});

全局异常兜底配置(可选,放在服务入口文件中)

// 捕获未处理的同步抛出异常
process.on('uncaughtException', (err) => {
  console.error('全局未捕获异常:', err);
  // 可在此处添加异常日志上报逻辑
});

// 捕获未处理的Promise拒绝异常
process.on('unhandledRejection', (reason) => {
  console.error('全局未处理Promise拒绝:', reason);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:07