尽管成功的 200 响应,AWS Appsync GraphQL 查询静默失败

Posted

技术标签:

【中文标题】尽管成功的 200 响应,AWS Appsync GraphQL 查询静默失败【英文标题】:AWS Appsync GraphQL query silently failing though successful 200 response 【发布时间】:2022-01-20 02:57:31 【问题描述】:

我有一个在两个环境中运行的 React Amplify 应用程序。一种环境用于我妻子的博客 (www.riahraineart.com),另一种用于我的博客 (www.joshmk.com)。两个站点都在同一个 repo 上运行,我只是根据我用来从表中检索它们的配置的环境变量来配置站点的不同。

  useEffect(() => 
    async function fetchData() 
      const configData = await API.graphql(
        query: queries.getConfiguration,
        variables:  id: process.env[configIdName] ,
      );
      if (configData && isMounted.current)
        setConfig(configData.data.getConfiguration || );
    
    if (process.env[configIdName]) 
      fetchData();
    
  , [isMounted, configIdName]);

对于我的站点,当我为此配置发出 GraphQL 请求时,它成功并且站点启动。对于我妻子的站点,对配置表的调用会静默失败。静默是指 API 没有返回有用的响应,即使它是成功的 200 响应。

当我打开 AppSync,转到两个环境并运行查询时,我会收到配置项。当我打开 dynamodb 时,我也会看到它们。

我认为某处可能有一些过期的令牌,但如果是这种情况,我想我会收到一个失败的响应,说明这一点。

另一种可能是我的妻子修改了她网站的配置或创建了一个帖子,其中包含一些前端没有预料到的内容。但在这种情况下,我至少希望看到调用响应以接收她的站点配置。

在此先感谢您提供的任何见解!

【问题讨论】:

CORS 可能是罪魁祸首吗? 嗯,@Norman 我希望如果 CORS 配置错误,两个站点都会失败。 当您在 appsync 控制台中运行错误查询时,它的结果是什么?配置表项在 dynamodb 控制台中是否按预期存在?换句话说,首先尝试排除后端问题。 @fedonev 对这两个问题都是肯定的。当我在 AppSync 中转到它们各自的环境并运行查询时,我会看到配置项。而且在查看 dynamodb 中的表格时,我还看到了配置项。我应该在上面提到,我会补充。 这很有帮助! AppSync 控制台是一个客户端实现,可以像前端一样进行调用。如果 AWS 控制台查询返回预期结果,则您已将问题缩小为前端问题。如果您需要更有说服力,请执行cURL or Postman 中的错误查询。我希望它会正常工作。另一个测试 - 模拟空响应:当您的客户端将格式良好但不存在的变量输入传递给查询时,您从 AppSync 得到什么响应? 【参考方案1】:

我修好了!不幸的是,该解决方案非常适合我的情况,因此它可能不会为其他人提供太多价值。不过,我希望它有助于解决问题。

使用amplify pull --appId <appId> --envName <envName> 将我的后端配置本地切换到她的站点后,我注意到配置调用现在成功了。我忘记了我从来没有真正在本地运行过她的网站,我只是跳到她的分支合并和推送。

该网站仍然没有渲染,这让我对比赛条件感到振奋。我发现我为一些图像留下了一个检查器,这些图像是我最顶层组件的门控渲染。我的妻子有大量图像,所以我认为这个调用花费的时间太长,无法使事件链以正确的顺序加载项目,并且页面显示为空白。只需在此时删除对这些图像的检查,即可显示 UI。

【讨论】:

以上是关于尽管成功的 200 响应,AWS Appsync GraphQL 查询静默失败的主要内容,如果未能解决你的问题,请参考以下文章

AWS AppSync 响应排序结果?

用于塑造响应数据的 AWS AppSync 查询(类似于 SQL 中的 Group By)

将 aws-appsync 与 nextjs 连接

AWS AppSync 中的 InvalidUserPoolException

AWS AppSync 解析器内部超时配置

未找到字段的值 - AppSync AWS