Aws Appsync $util.error:数据和错误信息始终为空

Ben*_*uré 2 amazon-web-services aws-appsync

我正在使用 AWS AppSync。当请求失败时,我正在尝试使用解析器响应映射模板中的$util.error()帮助程序(此处记录)输出一些错误详细信息。无论我做什么,我都无法让 AppSync 输出输出中的dataerrorInfo字段error

这是我拥有的 Lambda。

exports.handler = (event, context, callback) => {

  callback(null, {
    data: {
      name: "Test",
    },
    errorMessage: "Some error Message",
    errorType: "SomeErrorType",
    errors: {
      "foo": "bar",
      "bazz": "buzz",
    }
  })
};
Run Code Online (Sandbox Code Playgroud)

如您所见,它非常简单。我只是用返回一个对象dataerrorserrorMessageerrorType属性。

这是我的响应映射模板

$utils.error($context.result.errorMessage, $context.result.errorType, $context.result.data, $context.result.errors)
Run Code Online (Sandbox Code Playgroud)

再次,非常直接。我只是直接使用来自 Lambda 的字段抛出错误。

但是当我执行查询时,我得到了这个:

{
  "data": {
    "myField": null
  },
  "errors": [
    {
      "path": [
        "myField"
      ],
      "data": null,
      "errorType": "SomeErrorType",
      "errorInfo": null,
      "locations": [
        {
          "line": 2,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "Some error Message"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,errorTypemessage领域得到正确填充,但不是errorInfodata人。

我错过了什么吗?为什么这不起作用?

我还尝试$util.error对模板中的参数进行硬编码。我得到了同样的结果...

小智 5

正如文档所述,Note: data will be filtered based on the query selection set. 所以需要返回与选择集匹配的数据。

因此,对于如下所示的基本架构:

type Post {
    id: ID!
    title: String! 
}

type Query {
    simpleQuery: Post
}

schema {
    query: Query
}
Run Code Online (Sandbox Code Playgroud)

还有一个查询:

query {
  simpleQuery {
    title   // Note this selection set
  }
}
Run Code Online (Sandbox Code Playgroud)

还有一个响应映射模板:

$utils.error($context.result.errorMessage, $context.result.errorType, $context.result.data, $context.result.errors)
Run Code Online (Sandbox Code Playgroud)

使用 Lambda 代码:

exports.handler = (event, context, callback) => {

  callback(null, {
    data: {
      title: "Test",   // The same selection set
    },
    errorMessage: "Some error Message",
    errorType: "SomeErrorType",
    errors: {
      "foo": "bar",
      "bazz": "buzz",
    }
  })
};
Run Code Online (Sandbox Code Playgroud)

它将返回:

{
  "data": {
    "badOne": null
  },
  "errors": [
    {
      "path": [
        "badOne"
      ],
      "data": {
        "title": "Test"
      },
      "errorType": "SomeErrorType",
      "errorInfo": null,
      "locations": [
        {
          "line": 8,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "Some error Message"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢丽莎,我试过了,我终于让它工作了。我已经在“数据”部分返回了一个与我的查询匹配的对象,但我的问题是我缺少一些必填字段。发生这种情况时,`data` 部分返回 null。所以,这解决了我的“数据”问题。但是,`errorInfo` 部分呢?在您的示例中,当它应该在我的 lambda 响应中返回 `errors` 属性时,它也会返回 null。 (3认同)