我有两个有角度的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。
如何解决此问题并根据子域提供不同的应用程序?
答案 0 :(得分:0)
所以我想出了一个解决方案。不要认为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));