SSR时具有Route Param的Angular Universal

时间:2019-12-11 10:56:47

标签: angular angular-router angular-universal

我的Angular Universal App(v8.1.1)出现了一个奇怪的问题。

在通用存储库中看不到任何相关的当前或过去的问题。

我的代码的一个简单示例:

路线:

import express from 'express'
import { Server } from "http";

declare global {
  namespace Express {
    interface Application { 
      __listener: Server
    }
  }
}
const app = express();
app.__listener = app.listen();

组件:

export const routes = [
  {
    path: '',
    component: ParentComponent,
    children: [
      {
        path: ':routeParam',
        component: ChildComponent
      }
    ]
  }
];

server.ts:

...
export class ChildComponent {

  id: string;

  constructor( private route: ActivatedRoute ) {
    this.id = this.route.snapshot.params[ 'routeParam' ]; // get unexpected values eg. favicon.ico
  }

}

通过浏览器渲染时,动态路由(带有参数)可以正常工作,但在“服务器端渲染”时则不能。

超时和中断。

服务器端渲染时,它接收... 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, res }); }); favicon.ico作为bg.svg值(以及预期的字符串值)。

这些文件是从domain / assets / ..文件夹提供的资产。

所以我不明白它们如何到达组件路径参数。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

从快递serve static middleware documentation

  

当未找到文件时,此模块将不发送404响应,而是调用next()移至下一个中间件,

我认为Express由于某种原因找不到静态文件favicon.icobg.svg,因此它调用了下一个中间件,该中间件由有角度的应用程序及其路由处理。

确保dist \ browser文件夹包含您要查找的文件。如果有,请尝试从angular调用这些文件时检查这些文件的相对路径