Angular2和Express

时间:2017-04-21 06:02:38

标签: node.js express angular2-routing

我正在使用带有Express的Angular2应用程序。

我有这个网址/v2/tickets?filterId=321。重新加载页面后,网址将更改为/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')));

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

1 个答案:

答案 0 :(得分:3)

发生重写是因为redict是serve-static中的默认值。您可以使用express.static('dir', { redirect: false })禁用它,但无法找到/ v2 / ticket并返回404.例如express-static具有相同的行为。

你有一个基础集(如<base href="/v2">),并返回index.html,这不是你的api路径,如

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

因为我不知道这对您发布的代码有何影响。

除非你不使用url params,否则redict不会成为问题,因为angular会自动删除尾部斜杠。如果/ v2 / tickets / 321也可以使用,这将是最简单的解决方案,具有更好看的URL 如果您需要url param并且想要使用express和serve-static,那么在路由中向路径添加尾部斜杠会更容易。

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

location /api {
  proxy_pass http://api;
}

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