Express服务2个不同的Angular PWA

时间:2019-06-22 13:07:33

标签: node.js angular express web-hosting progressive-web-apps

我已经为此苦苦挣扎了一段时间,并且我开始认为我的方法是完全错误的。如果是这种情况,请告诉我并提供指导。

上下文

我有两个角度应用程序,一个是常规应用程序(用于桌面),一个是离子应用程序(用于移动设备)。我使用这样的快递服务器为他们服务:

app.use(expressStatic(path.join(__dirname, '/../web-app'), { index: false }));
app.use(expressStatic(path.join(__dirname, '/../ionic-app'), { index: false }));

app.get('*', function(req, res) {
  if (isMobile(req)) {
    res.sendFile(path.join(__dirname, '/../ionic-app/index.html'));
  } else {
    res.sendFile(path.join(__dirname, '/../web-app/index.html'));
  }
});

该文件有效,但是我最近使用ng add @angular/pwa ...命令将它们(都)设置为PWA,并且没有更改与该处服务人员相关的任何内容。

问题

现在,我注意到该解决方案存在一个问题。如果这两个位置/../web-app /../ionic-app都具有一个名称相同的文件(例如ngsw-worker.jsmanifest.webmanifest),则在被要求像<link rel="manifest" href="manifest.webmanifest">这样的位置时将忽略该文件。我不确定会为谁服务。

解决同名文件的问题

我试图通过用以下代码替换上面的代码来解决该问题:

app.get('*.*', (req, res, next) => {
  if (isMobile(req)) {
    expressStatic(path.join(__dirname, '/../ionic-app'))(req, res, next);
  } else {
    expressStatic(path.join(__dirname, '/../web-app'))(req, res, next);
  }
});

app.get('*', function(req, res) {
  if (isMobile(req)) {
    res.sendFile(path.join(__dirname, '/../ionic-app/index.html'));
  } else {
    res.sendFile(path.join(__dirname, '/../web-app/index.html'));
  }
});

那解决了文件“被覆盖”的问题,但是我发现至少还有一个问题。遵循这些步骤:

  1. 以移动模式输入网站-可以正常运行
  2. 尝试在网络离线(脱机)的情况下进入-可以正常使用
  3. 请求网站的桌面版本-可以正常使用
  4. 尝试在网络离线(脱机)的情况下进入-❌
  5. 返回该网站的移动版本-可以使用
  6. 尝试在网络离线(脱机)的情况下进入-❌

我知道这是一种情况,不适用于大多数用户,但仍然希望它能正常工作。此外,它会取消在用户清除缓存之前离线运行应用程序的功能。

我还担心这不是很“干净”或“靠书”的解决方案。

问题

根据设备(台式机/移动设备)提供两种不同版本的应用程序的“进入”,“优雅”解决方案是什么?

我宁愿使解决方案尽可能简单,使用Firebase或heroku进行托管,因此不要使用复杂的nginx解决方案,等等。

我的想法/研究

我注意到互联网上的各种行为:

  • facebook,一些较旧的网站通过移动应用程序(facebook.com-> m.facebook.com)将您重定向到其他路径-这不是我想到的解决方案。
  • airbnb默默地做,就像我在这里想要的那样。因此该网址是相同的,但提供的应用程序是不同的。

0 个答案:

没有答案