【问题标题】:Angular Universal: Route not being renderedAngular Universal:未渲染路线
【发布时间】:2018-03-22 16:14:23
【问题描述】:

经过几个小时努力使我的网站通用以支持服务器端渲染,我注意到该网站的基本路由'' 不是由服务器渲染的。浏览器总是等待整个站点加载,然后显示主页。服务器或浏览器上不会显示任何错误。

如果直接从浏览器调用,所有其他路由都将在服务器上呈现,包括具有解析器的路由。有趣的是,我有路由 /Home 重定向到 '' 并直接从服务器中的浏览器渲染调用 /Home

关于从哪里开始寻找问题的任何建议?

repo 是 here,因为我什至不知道要为这个问题发布什么代码。

【问题讨论】:

  • 你做了什么来解决这个问题?我遇到了相反的问题,仅加载基本路线。
  • @Willie 我从来没有弄清楚那个旧版本的 Angular Universal 的问题。此后,我使用默认包含 Universal 的较新版本的 Angular 重新编译了我的应用程序。新版本创建了大部分基本代码并且可以正常工作。祝你好运!
  • 我让它工作了。它最终成为 Windows 中与 Apache 相关的问题。完全相同的代码和包在 Linux 中工作...... Windows 机器的配置文件可能有问题。

标签: angular angular-universal


【解决方案1】:

将我的应用程序迁移到 Angular Universal 后,我遇到了同样的问题。除了根页面未在服务器端呈现之外,一切正常。

在谷歌搜索和注释掉我的服务器脚本的某些部分后,我意识到我忘记在迁移之前删除为 Angular 应用程序提供服务的行。

这是我的代码:

import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import * as express from "express";
import * as helmet from "helmet";
import * as path from "path";
import * as favicon from "serve-favicon";
import * as bodyParser from "body-parser";
import {ngExpressEngine} from "@nguniversal/express-engine";
import {provideModuleMap} from "@nguniversal/module-map-ngfactory-loader";
import {enableProdMode} from "@angular/core";

enableProdMode();

const app = express();

// config
app.use(helmet());
app.use(favicon(path.join(__dirname, '../../favicon.ico')));
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true}));
app.use(express.static(path.join(__dirname, "../../dist/frontend/browser"))); // <- statically serving the Angular app

const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require(path.join(__dirname, "../../dist/frontend/server/main"));

// rendering engine (angular universal)
app.engine('html', ngExpressEngine({
    bootstrap: AppServerModuleNgFactory,
    providers: [
        provideModuleMap(LAZY_MODULE_MAP)
    ]
}));
app.set('view engine', 'html');
app.set('views', path.join(__dirname, "../../dist/frontend/browser"));

// routing
app.use(express.static(path.join(__dirname, "../../public")));
app.use("/api", require("./routes/api"));
app.use("/images", require("./routes/images"));

app.get('*.*', express.static(path.join(__dirname, "../../dist/frontend/browser"), {
    maxAge: '1d'
}));

app.get('/*', (req, res) => {
    res.render('index', {req, res}, (err, html) => {
        if (html) {
            res.send(html);
        } else {
            console.error(err);
            res.send(err);
        }
    });
});

module.exports = app;

删除app.use(express.static(path.join(__dirname, "../../dist/frontend/browser"))); 后,Universal 现在可以毫无问题地渲染根页面。

【讨论】:

  • 哪个文件有太大变化?
猜你喜欢
  • 2018-08-02
  • 2021-05-20
  • 2022-12-03
  • 1970-01-01
  • 2020-12-16
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
相关资源
最近更新 更多