我有两个我想从回送后端提供服务的angular 2客户端应用程序。我已经能够从子目录(www.mysite.com/subdirectory
)成功地为他们提供服务,但是我正在尝试从子域(www.subdomain.mysite.com
)中为他们提供服务。
环回似乎没有内置的方式来处理通过中间件或我可以看到的其他任何地方的子域路由。因此,我尝试通过匹配在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。如何解决此问题并根据子域提供其他应用程序?
最佳答案
所以我想出了一个解决方案。不要以为loopback
具有处理此问题的内置方式,因此可以将其与以下内容一起使用:
从middleware.json清除了文件部分
"files": {}
使用
vhost
和serve-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));