如何在生产中运行通用角度

时间:2018-09-30 11:50:57

标签: angular express angular-universal

我有一个基于MEAN STACK的项目。

Front-end:角度为6 *。

Backend:ExpressJ和Mongodb。

在本地,angular在端口4200上运行,而ExpressJs在端口3000上运行。

在生产中,我构建了angular并作为ExpressJ app.js中的静态文件fils运行它。例如,

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 };

我的问题是如何添加expressJS的server.ts文件和app.js文件中的那些功能。

我进行了很多搜索,但找不到任何解决方案。

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要为静态文件添加一个处理程序。这样,我为输出目录“ 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应用程序按预期方式运行后,在此之上添加任何功能。

如果您有一个现有的用JavaScript编写的Node.js应用程序,并且想要在其之上添加此功能,那么如果没有这样做,实际上没有理由在TypeScript中编写Angular应用程序的Universal端。需要。

您的构建过程应该将Angular应用程序的TypeScript转换为JavaScript,但是server.js文件本身,或者其功能可以只是纯JavaScript,只要它能完成相同的工作即可。