子域路由环回多个静态文件(angular 个应用程序)

Subdomain routing in loopback to multiple static files (angular apps)

我有两个 angular 2 客户端应用程序,我想从我的环回后端提供服务。我已经能够从子目录 (www.mysite.com/subdirectory) 成功地为它们提供服务,但我正在尝试从子域 (www.subdomain.mysite.com) 为它们提供服务。

Loopback 似乎没有内置的方式来处理通过中间件或我能看到的任何其他地方的子域路由。因此,我试图通过在 middleware.json 文件中为 final 设置的 url-not-found-handler 中的主机名匹配来完成路由:

  if (req.hostname.match(/subdomain1\./g)) {
    console.log('requesting subdomain1 site')
    res.sendFile(path.resolve() + '/dist/subdomain1/index.html')
  } else if (req.hostname.match(/subdomain2\./g)) {
    console.log('requesting subdomain2 site')
    res.sendFile(path.resolve() + '/dist/subdomain/index.html')
  } else {
    next();
  }

我还在 middleware.json 中设置了静态文件:

  "files": {
      "loopback#static": [
        {
          "name": "subdomain1",
          "params": "dist/subdomain1"
        },
        {
          "name": "subdomain2",
          "params": "dist/subdomain2"
        }
    ]
  }

这似乎有效,因为它正确匹配并发送了正确的 index.html 文件。通过在浏览器中检查,我知道它是正确的 index.html。

但由于某种原因,实际 angular 得到服务的应用程序 ALWAYSloopback#static 数组中的第一个。如果我先有 subdomain2,那么 subdomain1.mysite.com 和 subdomain2.mysite.com.

都会显示

如何解决此问题并根据子域提供不同的应用程序?

所以我想出了一个解决办法。不要认为 loopback 有内置的处理方式,所以让它与以下内容一起工作:

已从 middleware.json

中清除文件部分
"files": {}

使用 vhostserve-static 的组合根据子域进行交付

var vhost = require('vhost');
var serveStatic = require('serve-static');

var serveSubdomain1 = serveStatic('dist/subdomain1', {'index': ['index.html']})
var serveSubdomain2 = serveStatic('dist/subdomain2', {'index': ['index.html']})

app.use(vhost('subdomain1.mysite', serveSubdomain1));
app.use(vhost('subdomain2.mysite', serveSubdomain2));