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

AWS Amplify中用Axios发送GraphQL更新请求报错求指导

AWS Amplify GraphQL更新请求报错处理

我用AWS Amplify开发应用,要在Node.js API函数里创建一个端点来修改GraphQL中的字段。由于该API函数仅支持ES5,无法使用AWS文档中推荐的ES6库,因此选择使用Axios。

我编写的GraphQL查询如下:

const query = /* GraphQL */ `mutation updatePublication($id: ID!, $keywords: String) {
  updatePublication(id: $id, keywords: $keywords){
    id
    keywords
  }
}`

Axios请求代码:

const data = await axios.post(
  process.env.API_APPNAME_GRAPHQLAPIENDPOINTOUTPUT,
  {
    query: query,
    variables: {
      id: variableWithID,
      keywords: "updated keywords!"
    }
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': process.env.API_APPNAME_GRAPHQLAPIKEYOUTPUT
    }
  }
)

运行请求后返回状态码200,但附带错误信息:

{
  data: null,
  errors: [
    {
      path: null,
      locations: [Array],
      message: "Validation error of type MissingFieldArgument: Missing field argument input @ 'updatePublication'"
    },
    {
      path: null,
      locations: [Array],
      message: "Validation error of type UnknownArgument: Unknown field argument id @ 'updatePublication'"
    },
    {
      path: null,
      locations: [Array],
      message: "Validation error of type UnknownArgument: Unknown field argument keywords @ 'updatePublication'"
    }
  ]
}

错误原因

这些错误的核心是Amplify自动生成的GraphQL更新mutation要求参数通过input对象传递,而非直接传字段:

  • MissingFieldArgument:updatePublication mutation必须接收一个名为input的参数,你没传
  • UnknownArgument:你直接传递的id、keywords并不是updatePublication定义的顶层参数,所以被判定为未知参数

解决方法

1. 修改GraphQL mutation的写法

调整变量定义和mutation调用,用input对象承载参数:

const query = /* GraphQL */ `mutation updatePublication($input: UpdatePublicationInput!) {
  updatePublication(input: $input){
    id
    keywords
  }
}`

2. 调整Axios请求的变量结构

把id和keywords打包到input对象中:

const data = await axios.post(
  process.env.API_APPNAME_GRAPHQLAPIENDPOINTOUTPUT,
  {
    query: query,
    variables: {
      input: {
        id: variableWithID,
        keywords: "updated keywords!"
      }
    }
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': process.env.API_APPNAME_GRAPHQLAPIKEYOUTPUT
    }
  }
)

补充说明

Amplify根据数据模型自动生成的CRUD mutation,统一使用input对象作为参数载体,这是它的规范。你可以查看项目中amplify/backend/api/[你的API名称]/schema.graphql文件,确认UpdatePublicationInput的结构,确保传入的字段符合定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:30:53