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:Query.example 字段类型必须是输出类型,但得到:[object Object]
GraphQL Args 错误:参数类型必须是输入类型,但得到:函数 GraphQLObjectType(config)