如何在gcloud而非域的根目录上启动Express Server?

时间:2018-12-31 16:49:57

标签: express dns gcloud

我解释了我的问题, 我有一个Gcloud域“ example.appspot.com”(例如),其中包含来自squareSpace的网站。我想在此域的node.js中添加一个Web应用程序而不覆盖原始站点。 我想通过此链接“ example.appspot.com/webApp/”在Web应用程序上连接用户。如果您访问的是“ example.appspot.com”,那么您将位于squareSpace网站上。

如果我部署了Web应用程序并转到“ example.appspot.com”,则说明我有该Web应用程序,但是来自squareSpace的网站已关闭... 但是我的应用程序没有“ /”的“获取或发布”,第一页是“ / login”。 如果我继续输入“ /”,则只有“无法获取/”

我尝试使用dispath.yaml,但不起作用。

dispatch:
  - url: "example.appspot.com/webApp"
    service: default

没有任何变化,“ example.appspot.com/webApp”无效...

然后我尝试使用openapi-appengine.yaml。

swagger: "2.0"
info:
  description: "WebApp"
  title: "Title WebApp"
  version: "1.0.0"
host: "example.appspot.com/webApp"

但是它不需要主机中的“ /”。

我尝试在app.yaml中使用处理程序,但是它不起作用...

我找不到解决方法。

您知道我如何告诉gcloud仅在“ / webApp /”上使用该应用程序吗? 我为我的英语水平不好而感到抱歉,我每天都在进步。

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现此目的,具体取决于您的情况:

1)快速路线:

每个路由执行需要的逻辑。 Node与module.exports / require系统一起使用,因此对于每条路由,您可以有一个不同的JS文件,该文件导出该路由的代码中使用的所有应有的功能。

示例:

server.js

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  const index = require('./index');
  res.send(index.hello());
});

app.get('/webapp', (req, res) => {
    const webapp = require('./webapp');
    res.send(webapp.appFunction());
  });

index.js

exports.hello = function() {
    return "Hello";
  }

<强> webapp.js

exports.appFunction = function() {
    return "App Function";
  }

2)服务重定向:如果您需要在某个终结点上运行一个完整的应用程序,而不需要某些功能,则可以将Webapp部署为同一应用程序内的独立服务,然后将客户端请求重定向到给定端点上的该服务

为此,使用专用的package.jsonapp.yaml从自己的文件夹中创建和部署Webapp服务,使其与默认应用完全相同。只需app.yaml中指定服务名称service: webapp

一旦部署,您的服务将以https://[SERVICE_ID]-dot-[MY_PROJECT_ID].appspot.com的形式在Web链接上可用,您可以使用该链接从默认应用程序的端点进行重定向:

app.get('/webapp', (req, res) => {
    res.redirect('https://[SERVICE_ID]-dot-[MY_PROJECT_ID].appspot.com');
  });

More info about services and routing here。您也可以manage routing with dispatch.yaml

实施例如果服务ID为 “web应用”

dispatch:
  - url: "example.appspot.com/webApp"
    service: webapp