Экспресс больше не квалифицирует маршруты после добавления субдомена - PullRequest
0 голосов
/ 24 октября 2018

У нас было прекрасное маленькое приложение, которое функционировало отлично, а затем нас попросили превратить его в то, что другие в нашей организации могли бы использовать ... и это сломало все.У нас был простой экспресс-сервер с несколькими API-маршрутами, а также обслуживаемое приложение реагирования.
Изначально мы обращались к нашему приложению с помощью шаблона URL, например: https://our_team_name.company.com/app_name/

У нас было экспресс-прослушивание маршрутов.например:

// server.js:

import "./env";
import app from "app";
import { logger } from "@company/shared-code";

let fs = require("fs");
let https = require("https");

let privateKey = fs.readFileSync(`${process.env.CERT_HOME}/server.key`, "utf8");
let certificate = fs.readFileSync(`${process.env.CERT_HOME}/server.crt`, "utf8");
let credentials = { key: privateKey, cert: certificate };

let httpsServer = https.createServer(credentials, app);
httpsServer.listen(process.env.PORT || 3000, function () {
    logger.info("Application listening on port " + (process.env.PORT || 3000) + "!");
});

// app.js:

import express from "express";
import health from "./routes/health/health.js";

const app = express();
app.use("/app_name/rest/health", health);

app.use(express.static(path.join(process.cwd(), "build")));
app.get("/app_name/ui*", function(req, res) {
    res.sendFile(path.join(process.cwd(), "build", "index.html"));
});

// health.js:

import express from "express";
import os from "os";
import Promise from "bluebird";

const disk = Promise.promisifyAll(require("diskusage"));
const health = express.Router();

health.get("*", async (req, res) => {
    const { available, total } = await disk.checkAsync(os.platform() === "win32" ? "c:" : "/");
    try {
        res.send({
            timestamp: Date.now(),
            results: [
                {
                    testName: "System",
                    status: "OK",
                    message: "System Information",
                    platform: os.platform(),
                    processing: {
                        architecture: os.arch(),
                        cpu: {
                            count: os.cpus().length,
                            cpus: os.cpus(),
                        },
                        avgLoad: os.loadavg(),
                    },
                    memory: {
                        totalMemory: (os.totalmem() / 1000000000).toFixed(2) + "GB",
                        freeMemory: (os.freemem() / 1000000000).toFixed(2) + "GB",
                    },
                    disk: {
                        available: (available / 1000000000).toFixed(2) + "GB",
                        total: (total / 1000000000).toFixed(2) + "GB",
                        percentFull: (((total - available) / total) * 100).toFixed(2) + "%",
                    },
                },
            ],
            status: "OK",
        });
    } catch (err) {
        res.status(520).send({
        err,
        });
    }
});

export default health;

Express перехватил «остальные» маршруты (например, https://our_team_name.company.com/app_name/rest/health) и обслужил контент, а также перехватил «ui» маршруты и обслужил index.html, который имел реагирующий маршрутизатор для обработки клиентской сторонымаршруты, и все были счастливы.

Чтобы мы могли предоставить соответствующие сертификаты новым командам, которые использовали это, мы получили новый групповой сертификат, который охватывал * .technology.company.com / app_name /, поэтому следующая командамы можем раскошелиться на репозиторий и развернуть его без необходимости получения новых сертификатов ... отлично.

Мы поздравили себя с хорошо выполненной работой и развернули эту новую конфигурацию. Однако после перехода на https://our_team_name.technology.company.com/app_name/ это сейчаскажется, что каждый маршрут обслуживается get ("/ app_name / ui * ") ... несмотря на то, что я слишком много времени пытался отладить, я не смог понять, почему мои" остальные "маршруты не определены, или даже воссоздать это поведение через localhost.

В настоящее время запрашивающий https://our_team_name.technology.company.com/app_name/rest/health имеет ответ index.html и маршрут работоспособности никогда не вызывается.

Кто-нибудь сталкивался с подобной проблемой?

ОБНОВЛЕНИЕ: добавлены дополнительные подробности реализации

1 Ответ

0 голосов
/ 30 октября 2018

Работник службы create-реагировать-приложение пытался кэшировать ресурсы неожиданным образом, в результате чего экспресс-вызов на самом деле не вызывался ... Решение было обновлением для работника службы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...