类似的问题是HERE,但没有解决方案。我能够在localhost上运行我的项目,但一旦部署,加载元数据就失败了。查看chrome开发者工具,请求将发送至http://www.domain.org/breeze/metadata
而非http://www.domain.org/projectname/breeze/metadata
。在我的localhost上,元数据加载为http://localhost:xxxx/breeze/Metadata
。我的实体经理被宣布为new breeze.EntityManager('breeze')
。如果我将实体管理器更改为new breeze.EntityManager('projectname/breeze')
,则所有工作正常,但它在我的localhost上不起作用。如何声明实体管理器以使路径相对于项目并在我的localhost上工作并在部署时使用?
答案 0 :(得分:0)
您似乎可以假设数据服务器和Web服务器共享相同的来源。因此,您可以从浏览器的window.location
对象(在Angular中注入$location
)构造原点(无论是什么):
var origin = location.protocol+'//'+location.host+'/'; // 'ex: http://www.foo.com:3000/'
var projectName = location.hostname === 'localhost' ? '' : 'projectName/';
var serviceName = origin + projectName + 'breeze'.
var manager = new breeze.EntityManager(serviceName);
或者,您可以将任务委派给Web服务器,该服务器可以构建服务名称并将其作为您在客户端配置期间选择的JavaScript变量插入网页中。
如果你需要做出其他假设,我相信你可以从这里拿走它。