我正在使用带有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')));
任何想法,为什么这种重定向发生了,我该如何防止它?
答案 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;
}