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

GraphQL查询传参触发400错误,请求排查方向

问题排查方向
  • 修正GraphQL查询的参数定义
    你的typeDefs.js中Query下的randmovie没有声明接收参数,前端传参时会触发GraphQL的Schema验证失败,直接返回400错误,解析器根本不会执行。需要给randmovie添加参数定义:

    type Query {
      # ... 其他查询
      randmovie(year: Int): Movie # 补充参数声明,类型后续统一
      # ... 其他查询
    }
    
  • 调整解析器的参数接收逻辑
    GraphQL解析器的第二个参数是包含所有传入参数的对象,不是单个参数。当前解析器直接写async(parent, year)无法正确获取参数,要改成从args对象中取值:

    randmovie: async(parent, args) => {
      const randmovie=  await Movie.aggregate([
        {$match:{year: args.year}},
        { $sample: { size: 1 } }
      ]);
      console.log(randmovie);
      return randmovie[0]
    },
    
  • 统一全链路的类型匹配
    目前存在三处类型不一致,会导致验证或查询失败:

    1. Mongoose Schema中year是Number类型,但typeDefs.js里Movie的year定义为String,前端查询变量$year也写的String
    2. 前端useState初始化的是数字1950,和变量声明的String类型冲突
      建议统一为Int类型:
    • 修改typeDefs里的Movie类型:year: Int
    • 修改前端查询变量:$year: Int
      修改后的前端查询:
    export const QUERY_RANDOM_MOVIE = gql`
      query RandomMovie($year: Int) {
        randmovie(year: $year) {
          _id
          title
          plot
          year
          poster
          cast
          directors
          released
        }
      }
    `;
    
  • 查看请求的详细错误信息
    打开浏览器开发者工具的Network面板,找到对应的GraphQL请求,查看Response中的错误详情——400错误通常会明确提示Schema不匹配、类型错误等具体问题,这是最直接的排查依据。

  • 验证前端参数传递的正确性
    可以在useQuery中添加错误回调,打印完整错误对象,或者查看请求Payload确认变量是否正确传递:

    const { loading, error, data, refetch } = useQuery(QUERY_RANDOM_MOVIE, {
      variables: { year: year },
      onError: (err) => console.log('完整错误:', err)
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:05:01