为什么在使用 express.js 呈现应用程序服务器端时 angular 通配符路由解析如此缓慢?

Why are the angular wildcard routes resolving so slowly when rendering the app server side using express.js?

我有一个 angular 应用程序,其中路由 table 中的最后一条路线如下:

{ path: "not-found", redirectTo: "404" },
{ path: "404", component: NotFoundComponent },
{ path: "**", redirectTo: "404" }

如果我尝试访问一个不存在的路由,我会按预期以 404 结束。但是,在 express.js 服务器上呈现应用程序时,这最多需要 20 秒。为什么? 我启用了路由器跟踪,但在大约 19 秒内绝对没有任何反应,然后突然间,路由按预期解析...

Express 服务器设置为使用 angular 路由器呈现所有路由:

server.get("*", (req, res) => {
    return res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
  });

听起来服务器正在尝试不恰当地使用通配符。

如果您没有仔细研究,这里有一些可能会解决问题的故障排除提示。

  1. 处理此类请求的服务器配置是否存在问题?
  2. 服务器是所有请求都慢还是只是重定向?
  3. 使用相同的步骤,但不是快速服务器,当 运行 ng serve 时,使用本地 angular 服务器需要 20 秒吗?
  4. In Express 4.x, the * character in regular expressions is not interpreted in the usual way. As a workaround, use {0,} instead of *. This will likely be fixed in Express 5.

关于第 4 点,参见 Express routing

我想通了。它实际上是一个 Angular Material 组件 MatSnackBar,出于某种原因大大降低了我 NotFoundComponent 的 SSR。我一直无法找出原因,但是当禁用对 MatSnackBar 的调用时,页面会立即在 Node Express 服务器上呈现。