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

TRPC接口JSON响应截断问题排查求助

问题解决:TRPC接口返回JSON截断导致解析错误

核心问题定位

部署到render.com后,API服务返回的JSON内容被截断,导致客户端解析时出现Unexpected end of JSON input或Unterminated string in JSON at position错误。本地运行正常,直接调用API也存在问题,说明问题出在服务端或部署环境,与客户端配置无关。

解决步骤

1. 处理Prisma返回的非JSON兼容类型

Prisma默认返回BigInt类型(如id字段),JSON标准不支持该类型,本地开发环境可能有自动兼容处理,但部署环境(render.com的Node.js环境)没有。用superjson统一处理序列化:

首先安装依赖:

npm install superjson

然后修改TRPC的初始化配置:

// 你的TRPC router定义文件
import { initTRPC } from '@trpc/server';
import superjson from 'superjson';

const t = initTRPC.context<typeof createTRPCContext>().create({
  transformer: superjson, // 自动处理BigInt、Date等非JSON类型
});

同步更新API路由的配置:

// apps/api/pages/api/trpc/[trpc].ts
export default createNextApiHandler({
  router: appRouter,
  createContext: createTRPCContext,
  transformer: superjson, // 确保API层也使用相同的序列化规则
});

2. 检查render.com资源限制

render.com的基础/免费实例内存有限,当返回大体积数据时,系统可能截断响应:

  • 进入render.com控制台,查看实例的内存使用日志,确认是否存在内存溢出或资源耗尽的情况
  • 若内存不足,升级实例规格;或优化数据库查询,减少返回的数据量(比如分页查询、明确指定select字段过滤不必要内容)

3. 修复TRPC响应传输问题

Next.js Pages Router的TRPC适配器在部分部署环境下可能存在分块传输异常,手动包装处理:

// apps/api/pages/api/trpc/[trpc].ts
import type { NextApiRequest, NextApiResponse } from 'next';
import { createNextApiHandler } from '@trpc/server/adapters/next';

const trpcHandler = createNextApiHandler({
  router: appRouter,
  createContext: createTRPCContext,
  transformer: superjson,
});

export default async (req: NextApiRequest, res: NextApiResponse) => {
  // 强制开启分块传输,避免响应被截断
  res.setHeader('Transfer-Encoding', 'chunked');
  await trpcHandler(req, res);
};

4. 排查数据库查询的循环引用

如果查询返回了嵌套关联字段,可能出现循环引用导致JSON序列化失败:

// 错误示例:返回了嵌套的creatorAccount,可能引发循环引用
const items = await prisma.item.findMany({
  include: {
    history: {
      include: {
        creatorAccount: true, // 若creatorAccount又关联了item,会形成循环
      },
    },
  },
});

// 修复:明确指定select字段,避免循环引用
const items = await prisma.item.findMany({
  select: {
    id: true,
    label: true,
    status: true,
    history: {
      select: {
        creatorId: true,
        createdAt: true,
        // 只返回必要字段,不要嵌套可能引发循环的关联
      },
    },
  },
});

5. 验证render.com构建完整性

确保Turborepo在部署时正确构建,没有缓存旧代码:

  • 修改render.com的构建命令为:turbo clean && turbo build,强制清除缓存后重新构建
  • 确认环境变量NEXT_PUBLIC_API指向正确的API服务地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:26:02