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')));

有什么想法,为什么会发生这种重定向?我该如何预防呢?

会导致redict发生,因为redict是服务静态中的默认值。您可以使用express.static('dir', { redirect: false })禁用它,但是无法找到/V2/票证并返回404。Express静态具有相同的行为。

您有一个基础集(例如<base href="/v2">(,然后返回index.html的所有内容,这不是您的API路线,例如

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

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

除此之外,如果您不使用URL参数,那么redict将不是问题,因为Angular会自动删除后斜线。如果/v2/tickets/321也可以使用,这将是最简单的解决方案。
如果您需要URL参数并想使用Express和SERVET静态,也许在路由中的路径上添加尾斜线会更容易。

个性化我更喜欢静态文件的nginx,因为它更快,具有更好的缓存,更多的选项,...并将所有API请求转发到node到node,例如

location /api {
  proxy_pass http://api;
}
location / {
  try_files $uri /index.html;
}

最新更新