首页 > 解决方案 > 如何在 gcloud 上但不在域的根目录上启动 express 服务器?

问题描述

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

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

我尝试使用 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/" 上使用该应用程序吗?我很抱歉我的英语水平不好,我每天都在提高它。

标签: expressdnsgcloud

解决方案


有两种方法可以实现这一点,具体取决于您的方案:

1) 特快路线:

每条路线都会执行您需要的逻辑。Node 与 module.exports/require 系统一起工作,因此对于每个路由,您可以拥有一个不同的 JS 文件,该文件导出所有应有的函数,用于路由的代码。

例子:

服务器.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. 只需在中指定服务名称app.yamlservice: webapp

部署后,您的服务将在表单中的网络链接上可用https://[SERVICE_ID]-dot-[MY_PROJECT_ID].appspot.com,您可以使用它从默认应用程序的端点重定向:

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

有关服务和路由的更多信息在这里。您还可以使用 dispatch.yaml 管理路由

例如,如果您的服务 ID 是“webapp”

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

推荐阅读