我有一个基于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
文件中的那些功能。
我进行了很多搜索,但找不到任何解决方案。
谢谢。
答案 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,只要它能完成相同的工作即可。