禁用游乐场时,阿波罗服务器返回 GET 查询丢失
Posted
技术标签:
【中文标题】禁用游乐场时,阿波罗服务器返回 GET 查询丢失【英文标题】:apollo-server returning GET query missing when playground is disabled 【发布时间】:2020-02-24 00:24:35 【问题描述】:当我模拟production
(又名playground is disabled
)并转到我的根目录http://localhost:9000/
时,我收到以下响应:
400 Bad Request
GET query missing
有没有办法防止这种情况或解决方法来呈现其他页面?
我是阿波罗的新手。我只使用apollo-server
(没有快递)。我将不胜感激。
【问题讨论】:
【参考方案1】:apollo-server
专门用于公开 GraphQL API。为方便起见,它会在开发中配置的任何路径(默认为/graphql
)公开一个 GraphQL Playground 实例。但是,Apollo Server 本身并不打算用于服务其他内容。如果您需要此功能,请使用 apollo-server-express
、apollo-server,hapi
、apollo-server-koa
等将 ApolloServer 与 Express 等 Web 应用程序框架集成,然后使用该框架提供您想要的任何其他内容。
【讨论】:
谢谢!我还看到了您回答的其他帖子 :) 我知道,但是,有没有办法在生产中呈现其他文本并避免检索bad request
。我不想添加express
只是为了显示其他消息或只是一个白屏而不是错误(2**)。再次感谢。
不,没有这样的配置选项。该路线存在或不存在。如果它不存在并且有人尝试访问它,他们将收到标准的 Express 丢失路由消息,就像他们尝试访问您服务器上任何其他不存在的路由一样。 ApolloServer 在后台使用 Express。【参考方案2】:
使用playground: true
:
const server = new ApolloServer(
introspection: true,
playground: true,
typeDefs,
resolvers,
)
【讨论】:
【参考方案3】:使用apollo-server-xxx
的默认配置,您需要向/graphql
端点发送POST
请求,请求正文为graphql 字符串。
我遇到了同样的问题,因为我发送了 GET
请求而不是 POST
。
【讨论】:
是的,这就是问题所在。使用 GET 而不是 post。我不喜欢 ppl 如何为邮递员使用新的内置 graphQL 查询器,因为很多像 Unity 这样的前端仍然没有库,我可能仍然需要发送 JSON。以上是关于禁用游乐场时,阿波罗服务器返回 GET 查询丢失的主要内容,如果未能解决你的问题,请参考以下文章
阿波罗节点服务器;编写插件时如何在请求上下文中获取突变/查询模式路径?