NodeJS Express - Ожидание при загрузке статических файлов занимает больше минуты - PullRequest
0 голосов
/ 06 июля 2018

У меня есть приложение NodeJS, использующее Express, которое обслуживает приложение Angular. Приложение работает в режиме кластера. При локальном запуске он работает как шарм.

Однако у меня есть производственная среда, в которой я использую docker для обслуживания приложения. При загрузке страницы в производственной среде на загрузку определенных статических файлов уходит более одной минуты: Download pending for more than a minute

В конце концов страница загрузится, но это займет больше времени, чем нужно. Мне интересно, если что-то не так с файлом server.js, который является основным файлом экспресс-приложения.

Файл сервера выглядит следующим образом:

// Get dependencies
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    console.log(`Master ${process.pid} is running`);

    // Fork workers.
    for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} died`);
        cluster.fork();
    });

    console.log("All workers started.");
}
else {
    const path = require('path');
    const https = require('https');
    const fs = require('fs');
    const cookieParser = require('cookie-parser');
    const bodyParser = require('body-parser');
    const sslPrivateKey = fs.readFileSync('sslcert/cert.key', 'utf8');
    const sslCertificate = fs.readFileSync('sslcert/cert.crt', 'utf8');
    const sslCredentials = { key: sslPrivateKey, cert: sslCertificate, passphrase: 'v1nd1ct4' };
    const express = require('express');
    const compression = require('compression');
    // Get API controller in the form of an Express Router.
    const api = require('./api');
    const portalBackend = require('./portalBackend');

    // Express RequestHandlers.
    const authCallbackHandler = require('./requestHandlers/authCallbackHandler');
    const validateRequestHandler = require('./requestHandlers/validateRequest');
    const responseReadyHandler = require('./requestHandlers/responseReadyHandler');
    const app = express();
    app.use(compression());

    // Serve Angular files as static content.
    app.use(express.static(__dirname + '/dist'));

    // Enable the use of cookies.
    app.use(cookieParser());

    // Enable parsers.
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    // Check if the request is valid.
    app.use(validateRequestHandler);


    // Let Express know of API routes.
    // Enable catching return from API controllers to handle setting new ID cookie.
    app.use('/portalapi', portalBackend, responseReadyHandler);

    app.use('/api', api, responseReadyHandler);

    // Check and handle the request if it originates from the IdentityServer.
    app.use(authCallbackHandler);

    // If no file or /api is matched, redirect to the homepage of the portal.
    app.all('/*', (req, res) => {
        res.sendFile(path.join(__dirname, 'dist'));
    });

    const port = process.env.PORT || '4200';
    app.set('port', port);

    const httpsServer = https.createServer(sslCredentials, app);
    httpsServer.listen(port, '0.0.0.0', () => console.log('HTTP Server listening to port: ' + port));

    console.log(`Worker ${process.pid} started`);
}

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

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