Angular2 和 Express

Angular2 and Express

我正在使用 Angular2 应用程序和 Express。

我有这个url/v2/tickets?filterId=321。重新加载页面后,url 变为 /v2/tickets/?filterId=321。这打破了我的 Angular2 路由。

在 chrome 网络调用中,我看到抛出 301。

这是我的简单服务器配置:

app.use('/v2', express.static(path.join(__dirname + '/dist')));
app.use('/v2/*', express.static(path.join(__dirname + '/dist')));

任何想法,为什么会发生这种重定向,我该如何防止它?

之所以会出现此错误,是因为此错误是 serve-static 中的默认设置。您可以使用 express.static('dir', { redirect: false }) 禁用它,但随后找不到 /v2/tickets 和 returns 404。例如express-static 具有相同的行为。

你有基础集吗(比如 <base href="/v2">),return index.html 这不是你的 api 路线,比如

app.get('/v2/*', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist/index.html'))
})

因为我不知道这如何与您发布的代码一起使用。

除此之外,如果您不使用 url 参数,则 redict 不会成为问题,因为 angular 会自动删除结尾的斜线。如果 /v2/tickets/321 也可以工作,这将是最简单的解决方案,而且 url.
如果您需要 url 参数并想使用 express 和 serve-static,也许在路由中的路径中添加尾部斜杠会更容易。

我个人更喜欢静态文件的 nginx,因为它更快,有更好的缓存,更多选项,...并将所有 api 请求转发到像

这样的节点
location /api {
  proxy_pass http://api;
}

location / {
  try_files $uri /index.html;
}