angular - 重新加载页面时 Angular Universal 崩溃(路由不起作用)
问题描述
刚刚在 firebase 部署了 Angular Unversal Web 应用程序。应用程序内部的所有路由都可以正常工作,但是当尝试从外部访问它们时,服务器会返回错误。这是错误消息:
functions: Beginning execution of "ssr"
⚠ functions: TypeError: handler is not a function
at cloudFunction (/home/dell/Documents/personal/motor-bike/functions/node_modules/firebase-functions/lib/providers/https.js:49:9)
at /usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:608:20
at /usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:582:19
at Generator.next (<anonymous>)
at /usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:7:71
at new ZoneAwarePromise (/home/dell/Documents/personal/motor-bike/functions/dist/server.js:6245:33)
at __awaiter (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:3:12)
at Run (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:575:12)
at /usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:607:15
at Generator.next (<anonymous>)
⚠ Your function was killed because it raised an unhandled error.
127.0.0.1 - - [08/Dec/2019:17:07:54 +0000] "GET /elektriniai-dviraciai-centrinis-motoras HTTP/1.1" 500 948 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
127.0.0.1 - - [08/Dec/2019:17:07:54 +0000] "GET /favicon.ico HTTP/1.1" 200 5430 "http://localhost:5000/elektriniai-dviraciai-centrinis-motoras" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
这是 server.ts 文件:
(global as any).WebSocket = require('ws');
(global as any).XMLHttpRequest = require('xhr2');
global['TextTrackCueList'] = null;
global['KeyboardEvent'] = null;
import 'zone.js/dist/zone-node';
import * as express from 'express';
import {join} from 'path';
const PORT = process.env.PORT || 4000;
const DIST_FOLDER = join(process.cwd(), 'dist');
var app = express()
const {AppServerModuleNgFactory, LAZY_MODULE_MAP, ngExpressEngine, provideModuleMap} = require('./dist/server/main');
app.engine('html', ngExpressEngine({
bootstrap: AppServerModuleNgFactory,
providers: [
provideModuleMap(LAZY_MODULE_MAP)
]
}));
app.set('view engine', 'html');
app.set('views', join(DIST_FOLDER, 'browser'));
app.get('*.*', express.static(join(DIST_FOLDER, 'browser')));
app.get('*', (req, res) => {
res.render('index', { req });
});
解决方案
长话短说。只需要在export
之前添加var app = express();
推荐阅读
- php - PHP mysql 选择 MAX()
- angular - 角度组件不会被垃圾收集
- spring - Spring boot MVN clean package 仅在 EC2 实例中需要更多时间
- jquery-multidatespicker - multiDatesPicker 在单击按钮时禁用某些日期
- javascript - Phaser3 javascript 无法加载图像
- javascript - 根据特定标签将 HTML 字符串拆分为多个部分?
- angularjs - 如何在量角器茉莉花中重试失败的测试规范
- android - 创建自定义参数 android viewmodel 类
- django - Django媒体图像不显示
- node.js - 我的 node + express 应用程序在本地部署良好,但在推送到 heroku 时不会部署