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

使用tRPC的useMutation时后端接收空输入,useQuery正常求助

tRPC useMutation 后端接收空输入问题排查与解决

可能的原因及解决方案

1. Zod 输入校验规则过于宽松

你的后端代码中,input 定义嵌套了两层 .nullish():

.input(z.object({ name: z.string().nullish() }).nullish())

这意味着整个输入参数可以是 null/undefined,如果前端传入的对象与Zod规则不匹配(比如包含未声明的字段、类型不兼容),tRPC会自动将 input 置为 null。

解决方法:
如果 create 接口需要必填的输入对象,去掉外层的 .nullish():

.input(z.object({ name: z.string().nullish() })) // 仅允许name字段为null/undefined,整个输入对象必填

若确实需要允许输入为空,确保前端传入的参数严格符合规则(要么是符合结构的对象,要么是 null/undefined)。

2. 前端传参结构与后端定义不匹配

检查前端 T_Insert_DevCompany 类型是否与后端Zod定义的结构一致:

  • 确认 latestDoc 是包含 name 字段的对象(而非数组、字符串等其他类型)
  • 查看浏览器控制台的 console.log({latestDoc}) 输出,确保参数结构正确

3. 网络请求 payload 异常

打开浏览器开发者工具的「网络」面板,找到tRPC的mutation请求(通常是POST请求,路径包含 /trpc),查看请求的 payload:

  • 若payload为空:说明前端 mutate(latestDoc) 未正确传递参数,检查 onSubmit 触发逻辑、latestDoc 的生成过程
  • 若payload有数据:说明后端解析或校验环节出问题,重点排查Zod规则和tRPC中间件

4. tRPC 中间件干扰

检查 publicProcedure 是否包含自定义中间件,确认中间件没有修改或清空 input 参数。

快速验证步骤

临时修改后端mutation,简化输入校验:

.input(z.any()) // 临时允许任意输入
.mutation(({ input }) => { 
    console.log({input}) 
    return input; 
})

如果此时后端能收到输入,说明问题出在原Zod校验规则上;如果还是为空,再排查前端传参和网络请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:53:17