【问题标题】:Running GraphQL server on Google Cloud App Engine在 Google Cloud App Engine 上运行 GraphQL 服务器
【发布时间】:2017-01-24 23:12:20
【问题描述】:

在 node.js 中在本地运行端点,我在我的 app.js 中使用了以下 sn-p

app.use('/graphql', (0, _expressGraphql2.default)(function (req) {
  return {
    schema: _schema2.default,
    pretty: true,
    context: _extends({ db: _models2.default }, (0, _isUser2.default)(req.headers['authorization'].split(' ')[1]))
  };
}));
app.listen(8080, function () {

但是,我的应用在尝试访问主机名:8080/graphql 时没有收到来自端点的任何响应。这适用于我的本地机器。

【问题讨论】:

  • 你的 app.yaml 文件是什么样的?您的路线是如何设置的?
  • app.yaml 格式如下: runtime: nodejs env: flex service: default
  • 我认为原始问题描述中提出的 sn-p 应该足以澄清有关路线的问题。我可以通过 https://.appspot-preview.com/graphql 访问端点,但如果我将侦听端口更改为 8080 以外的任何端口,例如 3000,https://.appspot-preview.com :3000/graphql 不起作用。我添加了 3000 以允许来自任何来源的防火墙限制。由于缺少任何文档,我可能会错过一个步骤。如果需要其他诸如端口转发或以其他方式设置路由之类的东西,如果你能指导我,我会很高兴

标签: node.js google-app-engine google-cloud-endpoints graphql graphql-js


【解决方案1】:

您的帖子标题表明您的 node.js 应用已部署在 Google App Engine 中。无需担心在该环境中为您的实例分配 IP 地址。实例由 App Engine 管理,请求路由到您的应用程序也是如此。

要访问应用程序,一旦部署到 App Engine,只需按照以下模式对其进行寻址:app_name.appspot.com。或者,对于自定义域,您可以遵循“使用自定义域和 SSL”指南 [1]。如果需要,本文档的“将 SSL 添加到您的自定义域”子章节可能会帮助您设置 SSL。

应用引擎在默认情况下侦听端口 8080。这对于外部调用者来说无关紧要,他们只能使用以下模式:app_name.appspot.com 来调用应用程序。这种情况适用于应用引擎环境。

[1]https://cloud.google.com/appengine/docs/flexible/nodejs/using-custom-domains-and-ssl

【讨论】:

  • 应用监听 8080 时有效。但即使在防火墙设置中添加相关规则后,它也不会说监听 3000。
  • 您的应用程序不会直接绑定到来宾 VM 上的端口,因为它在容器内运行。防火墙规则也只影响到 VM 的直接连接,这不是您在使用 App Engine 服务时所做的。不要将 App Engine 与 Compute Engine 混淆。话虽如此,您可以根据docs 设置PORT 环境变量来更改您的应用在容器内侦听的端口。
  • 请注意,无法从 appspot.com 前端转发端口 3000 - 这是打开的 public issue 的主题。如果您需要此功能(例如,用于实现 WebSocket API),暂时更好的选择是将您的服务器托管在Container Engine
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2018-05-11
  • 2020-05-17
  • 2014-10-10
  • 2011-08-14
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多