循环中的子域路由到多个静态文件(角度应用程序)

时间:2018-04-16 23:47:11

标签: node.js angular express url-routing loopbackjs

我有两个有角度的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。

但由于某种原因,服务总是的实际角度应用程序是loopback#static数组中的第一个。如果我首先拥有subdomain2,则会显示subdomain1.mysite.com和subdomain2.mysite.com。

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

1 个答案:

答案 0 :(得分:0)

所以我想出了一个解决方案。不要认为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));