为什么在使用 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 }] });
});
听起来服务器正在尝试不恰当地使用通配符。
如果您没有仔细研究,这里有一些可能会解决问题的故障排除提示。
- 处理此类请求的服务器配置是否存在问题?
- 服务器是所有请求都慢还是只是重定向?
- 使用相同的步骤,但不是快速服务器,当 运行
ng serve
时,使用本地 angular 服务器需要 20 秒吗?
-
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 服务器上呈现。
我有一个 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 }] });
});
听起来服务器正在尝试不恰当地使用通配符。
如果您没有仔细研究,这里有一些可能会解决问题的故障排除提示。
- 处理此类请求的服务器配置是否存在问题?
- 服务器是所有请求都慢还是只是重定向?
- 使用相同的步骤,但不是快速服务器,当 运行
ng serve
时,使用本地 angular 服务器需要 20 秒吗? -
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 服务器上呈现。