GraphQL 错误:方法不允许。必须是以下之一: 选项

Posted

技术标签:

【中文标题】GraphQL 错误:方法不允许。必须是以下之一: 选项【英文标题】:GraphQL Error : Method not allowed. Must be one of: OPTIONS 【发布时间】:2020-10-19 14:26:15 【问题描述】:

我是 GraphQL 新手。我需要用 php 和 GraphQL 制作一个 API。 我遵循了本教程: https://medium.com/swlh/setting-up-graphql-with-php-9baba3f21501

一切正常,但打开网址时出现此错误:


    "statusCode": 405,
    "error": 
        "type": "NOT_ALLOWED",
        "description": "Method not allowed. Must be one of: OPTIONS"
    

我将此添加到索引页面:

 header('Access-Control-Allow-Origin', '*');
 header('Access-Control-Allow-Headers', 'content-type');
 header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

但问题没有解决。 也许这里缺少一些东西:

return function (App $app) 
    $app->options('/routes:.*', function (Request $request, Response $response) 
        // CORS Pre-Flight OPTIONS Request Handler
        return $response;
    );

【问题讨论】:

【参考方案1】:

$app = AppFactory::create(); 添加 $app->setBasePath("/project/public/index.php");

【讨论】:

【参考方案2】:

错误消息:方法不允许错误状态代码:405

原因 : 实际上,我们收到此错误是对我们的选项请求而不是对我们的 Post 请求的响应。浏览器在发送 POST、PATCH、PUT、DELETE 等之前发送选项请求。 GraphQL 拒绝任何不是 GET 或 POST 所以选项请求被拒绝

解决方案: 转到我们的 cors 中间件并检查其选项是否返回空响应,状态为 200。因此,这样选项请求将永远不会到达 GraphQL 中间件

喜欢:

  if (req.method === "OPTIONS") 
    return res.sendStatus(200);
  

作为

  app.use((req, res, next) => 
      res.setHeader("Access-Control-Allow-Origin", "*");
      res.setHeader(
        "Access-Control-Allow-Methods",
        "OPTIONS, GET, POST, PUT, PATCH, DELETE"
      );
      res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
   
     if (req.method === "OPTIONS") 
           return res.sendStatus(200);
     
     next();
    );

【讨论】:

以上是关于GraphQL 错误:方法不允许。必须是以下之一: 选项的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 查询必须是字符串

GraphQL:错误:必须提供文档

带有快速错误的 GraphQL:Query.example 字段类型必须是输出类型,但得到:[object Object]

GraphQL Args 错误:参数类型必须是输入类型,但得到:函数 GraphQLObjectType(config)

如何打印错误 405 方法不允许用户使用

为啥我的 Graphql 项目抛出错误:字段类型必须是输出类型但得到:未定义