将 Apollo Express 服务器部署到 Heroku 时出现问题:“缺少 GET 查询。”

Posted

技术标签:

【中文标题】将 Apollo Express 服务器部署到 Heroku 时出现问题:“缺少 GET 查询。”【英文标题】:Problem deploying Apollo Express server to Heroku: "GET query missing." 【发布时间】:2019-09-26 11:53:09 【问题描述】:

我使用 Apollo Express 编写了一个简单的 GraphQL 服务器并将其部署到 Heroku。在处理了一些 Procfiles 之类的问题后,它构建好了。

当我点击主 URL https://limitless-atoll-59109.herokuapp.com 时出现错误

无法获取/

好的,那么我认为 Express 服务器一定只是在 graphql 端点上寻找 get 。但是当我点击https://limitless-atoll-59109.herokuapp.com/graphql 时,我得到了

GET 查询丢失。

我需要在 url 中包含端口吗?我在代码中正确设置了端口

const PORT = process.env.PORT || 4000

  app.listen(port: PORT, () =>

  console.log(`Server ready at http://localhost:$PORT$server.graphqlPath`)
  );

但我认为在访问 Heroku 上的服务器时不需要包含它,是吗?

不管怎样,这是错误日志中的错误

019-05-08T17:07:41.492327+00:00 heroku[路由器]: at=info method=GET path="/graphql" 主机=limitless-atoll-59109.herokuapp.com request_id=b6171835-aac4-4b45-8a7b-daebbb3167ed fwd="139.47.21.74" dyno=web.1 连接=0ms 服务=900ms 状态=400 字节=196 协议=https

感谢您的帮助!

【问题讨论】:

【参考方案1】:

如果您使用的是 apollo 服务器,您可以在生产环境中启用它:

const server = new ApolloServer(
  typeDefs,
  resolvers,
  introspection: true,
  playground: true,
);

【讨论】:

【参考方案2】:

答案是一个以/graphql 结尾的网址。但是,当您从浏览器中点击该 URL 时,它会尝试加载 Playground,但会失败,因为 Playground 在生产环境中默认处于禁用状态。

但是,您可以从客户端应用程序对该网址进行 graphql 调用,它工作正常。

【讨论】:

以上是关于将 Apollo Express 服务器部署到 Heroku 时出现问题:“缺少 GET 查询。”的主要内容,如果未能解决你的问题,请参考以下文章

如何将使用@nuxtjs/apollo 模块的nuxt 应用程序部署到heroku?

如何将 Express REST 层放在 Apollo GraphQL 服务器之上?

在 apollo-server-express 中增加身体限制大小

在 Heroku 上部署 react/apollo-server 应用程序

zeit-now v2 + apollo-server-express:操场错误:无法访问服务器

使用 apollo-server-express 迁移到 3.5.0