angular - Angular 11 Universal 不在页面源中显示动态数据
问题描述
我的 Angular 11 SSR 没有在页面源中显示动态数据。我已经完成了所有搜索并实现了我在网上找到的任何内容。有人可以帮忙吗?
我已将所有客户端代码封装在 isplatformbrowser 中。当我运行 ng run serve:ssr 时,我也没有在控制台中看到任何错误日志。我还为某些路线添加了一个解析器,但仍然没有运气。
server.ts 文件
import "zone.js/dist/zone-node";
import { ngExpressEngine } from "@nguniversal/express-engine";
import * as express from "express";
import { join } from "path";
import { AppServerModule } from "./src/main.server";
import { APP_BASE_HREF } from "@angular/common";
import { existsSync } from "fs";
import { NgxRequest, NgxResponse } from "@gorniv/ngx-universal";
import "localstorage-polyfill"
// The Express app is exported so that it can be used by serverless Functions.
export function app() {
const server = express();
const distFolder = join(process.cwd(), "dist/project/browser");
const indexHtml = existsSync(join(distFolder, "index.original.html")) ? "index.original.html" : "index";
global["localStorage"] = localStorage;
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
server.engine("html", ngExpressEngine({
bootstrap: AppServerModule,
}));
server.set("view engine", "html");
server.set("views", distFolder);
// Serve static files from /browser
server.get("*.*", express.static(distFolder, {
maxAge: "1y"
}));
// Do not serve the following routes via Universal
server.get("/", (req, res) => {
res.sendFile(join(distFolder, "index.html"));
});
// All regular routes use the Universal engine
server.get("*", (req, res) => {
res.render(indexHtml,
{
req: req,
res: res,
providers: [
{
provide: APP_BASE_HREF, useValue: req.baseUrl
},
{
provide: NgxRequest, useValue: (req)
},
{
provide: NgxResponse, useValue: (res)
}
]
});
});
return server;
}
function run() {
const port = process.env.PORT || 5000;
// Start up the Node server
const server = app();
server.listen(port, () => {
console.log(`Node Express server listening on http://localhost:${port}`);
});
}
// Webpack will replace 'require' with '__webpack_require__'
// '__non_webpack_require__' is a proxy to Node 'require'
// The below code is to ensure that the server is run only when not requiring the bundle.
declare const __non_webpack_require__: NodeRequire;
const mainModule = __non_webpack_require__.main;
const moduleFilename = mainModule && mainModule.filename || "";
if (moduleFilename === __filename || moduleFilename.includes("iisnode")) {
run();
}
export * from "./src/main.server";
解决方案
推荐阅读
- python - 带有 Tensorflow 的 CNN,在 CIFAR-10 上的准确性低且没有改进
- c# - 将结果 convert.FromBase64String 存储到 postgres bytea
- laravel - Laravel Eloquent 插入/更新的正确语法
- tensorflow - 张量流中的循环
- php - 我的 if 函数(|| 和 &&)无法正常工作
- php - 将自定义表单数据添加到 ORDER 选项卡 (WooCommerce)!
- java - Spring Boot - 具有角色和权限的 OAuth
- php - 使用 load() 函数加载 Ajax php 页面和 url 更改而不刷新
- yii2 - Yii2 - UrlManager 和带有连字符的参数
- java - 无法运行 monkeyrunner 脚本