Как запустить экспресс-сервер в gcloud, но не в корне домена?

Объясняю свою проблему, У меня есть домен Gcloud "example.appspot.com" (например) с веб-сайтом от SquareSpace. Я хотел бы добавить веб-приложение в node.js в этом домене, не перезаписывая исходный сайт. Я хотел бы подключить пользователя к веб-приложению по этой ссылке «example.appspot.com/webApp/». А если вы перейдете на «example.appspot.com», вы попадете на веб-сайт squareSpace.

Если я разверну веб-приложение и перейду на «example.appspot.com», у меня будет веб-приложение, но веб-сайт 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"

Но ему не нужен "/" в host.

Я пытался использовать обработчики в app.yaml, но это не сработало ...

Я не нахожу решения.

Вы хоть представляете, как я могу указать gcloud использовать приложение только в "/ webApp /"? Прошу прощения за плохой уровень английского, я улучшаю его с каждым днем.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
50
1

Ответы 1

В зависимости от вашего сценария есть два способа добиться этого:

1) Экспресс-маршруты:

каждый маршрут выполняет нужную вам логику. Узел работает с системой 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.json и app.yaml. Просто укажите название сервиса в app.yaml: service: 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:

Пример, если ваш идентификатор службы - "webapp"

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

Большое спасибо за ответ alp. Сейчас я работаю над чем-то другим, но я думаю, что это хороший метод решения моей проблемы. Я попробую позже. На данный момент мы используем другой домен для бета-тестирования. Но мы переходим в PROD через месяц, и мне нужно будет это сделать.

Sonny 31.01.2019 11:28

не беспокойтесь, вы справитесь, подход к обслуживанию (а не маршруты) может быть лучшим в вашей ситуации. Дай мне знать, когда ты это проверишь.

alp 31.01.2019 11:45

Другие вопросы по теме