Как запустить Angular Universal в производстве

У меня есть проект, основанный на MEAN STACK.

Front-end: Угловой 6. *.

Backend: ExpressJs и Mongodb.

Локально angular работает на порту 4200, а ExpressJs - на порту 3000.

На производстве я создаю angular и запускаю его как статические файлы внутри моих ExpressJ app.js. Например,

app.get("*", (req, res) => {
  res.sendFile(path.join(__dirname, "public/web/browser/index.html"));
});

В настоящее время я реализовал Angular Universal в моем существующем проекте, следуя документации.

Он работает локально, потому что Angular Universal имеет свой собственный Node.js® Express сервер локально, который работает на порту 4000.

В производственной среде, когда я хочу запустить статические файлы, Angular Universal отображается должным образом.

Например, app.js после добавления универсального.

let express = require("express");
let path = require("path");

let dotEnv = require("dotenv");
let passport = require("passport");
let app = express();
let server = require("http").Server(app);
dotEnv.load();
let fs = require("fs");
let io = require("socket.io").listen(server);
const appServer = require("./public/web/server/main");

// load intial configuration
require("./startup/initial-configuration")(app, io);
require("./server/config/socket")(io);
require("./server/config/database")(app, process.env.NODE_ENV);
require("./server/authentication/passport.local")(passport);
require("./server/authentication/passport.impersonate");
require("./startup/initial-routes")(app);
require("./server/middleware/custom-middleware")(app);

// angular universal
app.engine('html', ngUniversal.ngExpressEngine({
  bootstrap: appServer.AppServerModuleNgFactory
}));
app.get("*", (req, res) => {
  res.sendFile(path.join(__dirname, "public/web/index.html"));
});

require("./startup/schedule-jobs")(io);
module.exports = { app: app, server: server };

У меня вопрос, как добавить эту функцию, которая есть в server.ts files int app.js файле expressJS.

Я много искал, но не нашел решения.

Заранее спасибо.


person Nimatullah Razmjo    schedule 30.09.2018    source источник


Ответы (1)


Вам нужно добавить обработчик для ваших статических файлов. Таким образом, я добавляю обработчик для любого файла, в котором есть ., который содержится в моем выходном каталоге «dist / browser», который является клиентской стороной приложения Angular, созданного в процессе сборки:

import * as express from 'express';
import { join } from 'path';

const app = express();
const DIST_FOLDER = join(process.cwd(), 'dist');

. . .

app.get('*.*', express.static(join(DIST_FOLDER, 'browser')));

Я настоятельно рекомендую следовать универсальному руководству: https://angular.io/guide/universal в качестве отправной точки, а затем добавьте к нему любую функциональность, когда ваше приложение Angular заработает должным образом.

Если у вас есть приложение Node.js, написанное на JavaScript, и вы хотите добавить эту функциональность поверх него, действительно нет причин писать универсальную сторону приложения Angular на TypeScript, если вам это не нужно.

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

person Brandon    schedule 14.10.2018