Как запустить угловой универсальный в производстве - PullRequest
0 голосов
/ 30 сентября 2018

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

Front-end: Angular 6. *.

Backend: ExpressJs и Mongodb.

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

На производстве я создаю angular и запускаю его как статические файлы, хранящиеся в моих ExpressJs 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 файлах int app.js файла expressJS.

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

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

1 Ответ

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

Вам нужно добавить обработчик для ваших статических файлов.Поэтому я добавляю обработчик для любого файла с . в моем выходном каталоге «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, если выв этом нет необходимости.

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

...