角构建用作静态文件:路由问题

时间:2020-01-16 10:45:57

标签: node.js angular express nginx

我有一个拥有Express实例的服务器,并在其上构建了一个Parse Server。我将该服务器既用作API,又用作静态文件服务器(至少现在是这样;将来,我可能会将其拆分为两个Node实例)。该服务器尚未启用HTTPS,但是它确实具有指向它的域。

此服务器正在VPS(虚拟专用服务器)中运行,并通过Nginx接入Internet。 Nginx配置文件的工作方式如下(出于安全原因,我用域名代替):

server {
  listen 80;  server_name mydomain.com;  location / {
    proxy_pass http://localhost:5555;       <--- this is where the node instance is working
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
   }
}

以及提供静态文件的Node代码:

app.get('/', function(req, res) {
  res.status(200).sendFile(path.join(__dirname, '/public/app/index.html'));
});

这里的想法是,当用户访问我的域且URL中未添加任何多余部分时,服务器应检索public/app文件夹中的文件。

为了完成这项工作,我不得不将<base href="/" />文件的默认www/index.html更改为<base href="/public/app/" />。如果我访问该域,则可以正常工作并正确提供Web应用程序文件。

问题在于,如果我尝试访问Angular中定义的特定路由,则会失败。例如,如果我访问www.mydomain.com之类的域,主页,我就可以与应用程序中的所有功能和路线进行完美交互。但是,如果我选择访问应用程序的特定路由(即www.mydomain.com/user-stats),它将无法正常工作,而是给我这样的错误:

Cannot GET /public/app/user-stats

如您所见,服务器显示URL不必要的/public/app部分,该部分不应出现。我想我对静态文件服务或Nginx配置甚至是Angular路由本身有一些误解,但希望您能在这里为我提供帮助!

非常感谢。

1 个答案:

答案 0 :(得分:0)

只需将@media screen and (max-width: 599px) { p:nth-of-type(2) { display: none; } } 替换为app.get('/', function...)并将其放在文件末尾。所有先前定义的不匹配的路由都将退回到该路由