禁用游乐场时,阿波罗服务器返回 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-expressapollo-server,hapiapollo-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 查询丢失的主要内容,如果未能解决你的问题,请参考以下文章

从另一个查询调用时,返回 SETOF 记录会丢失记录类型

为啥阿波罗角查询返回空数组?

阿波罗客户端查询保护路由

阿波罗节点服务器;编写插件时如何在请求上下文中获取突变/查询模式路径?

MySQL查询丢失导致在phpMyAdmin中返回的node-mysql

阿波罗客户端在反应原生的初始重新加载中返回未定义