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

如何添加全局错误处理器将自定义错误转换为TRPCError?

解决方案

你可以通过全局Middleware实现自定义错误的全局转换,这样TRPC会自动根据转换后的TRPCError code生成对应HTTP状态码(比如NOT_FOUND对应404),无需手动修改响应结构。

步骤1:创建全局错误处理Middleware

这个Middleware会包裹所有Procedure的执行逻辑,捕获自定义错误并转换为TRPCError:

// 全局错误处理中间件
const errorHandlingMiddleware = middleware(async ({ next }) => {
  try {
    return await next();
  } catch (error) {
    if (error instanceof Error) {
      // 调用你的错误处理函数转换错误
      throw standardTrpcErrorHandler(error);
    }
    // 兜底处理非Error类型的异常
    throw new TRPCError({
      code: 'INTERNAL_SERVER_ERROR',
      message: '未知错误',
    });
  }
});

步骤2:将Middleware绑定到全局Procedure

修改你的publicProcedure,让所有路由默认使用这个错误处理中间件:

// 替换原来的publicProcedure定义,加入全局错误处理
const publicProcedure = t.procedure.use(errorHandlingMiddleware);

步骤3:修正错误处理函数的语法问题

注意你的standardTrpcErrorHandler里有个拼写错误,errorinstanceof需要改成error instanceof:

export const standardTrpcErrorHandler = (error: Error): TRPCError => {
  // 修复 instanceof 的拼写
  if (error instanceof MyCustomError) {
    return new TRPCError({
      ...error,
      code: 'NOT_FOUND',
      message: error.message,
    });
  }

  return new TRPCError({
    ...error,
    code: 'INTERNAL_SERVER_ERROR',
    message: error.message,
  });
};

这样,当MyCustomService抛出MyCustomError时,Middleware会自动捕获并转换为对应code的TRPCError,TRPC会自动处理HTTP状态码和响应格式,无需在errorFormatter中手动修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:40:07