我需要获取我的Angular 2应用的完整基准网址(例如http://localhost:5000或https://productionserver.com),以便我可以将它传递给应用上下文中的第三方服务。应用程序的位置取决于它是开发,各种分段/测试环境还是生产,并且我想动态检测它,因此我不需要维护硬编码列表。如何在Angular Universal中获得完整的基本URL(包括服务器,端口和协议)?
一个similar question已提出,在过去,但答案(即使用window.location.hostname或window.location.origin属性的某些版本),只有当angular2应用程序正在被浏览器呈现工作。
我想我的应用程序与Angular Universal一起工作,这意味着它需要在服务器端渲染,而不需要访问像window.location这样的DOM对象。
任何想法如何做到这一点?作为参考,使用asp.net核心作为后端(使用默认的dotnet新角模板)。
有一个在通用ORIGIN_URL提供商,https://github.com/angular/universal/blob/2.x/modules /platform-node/tokens.ts#L6。我会建议检查它是否有效。任何方式,一个好习惯是提供包含主机名的环境变量/提供者。对于API调用,主机可能会有所不同,您可能迟早会做同样的事情。 – estus
试着像'@Inject(ORIGIN_URL)@Optional()origin'那样注入它,并在服务器端调试它等于什么。 – estus
感谢您的提示!我对Angular有点新鲜,所以原谅我,如果这是显而易见的,但你知道我可以检查ORIGIN_URL是否会给我我想要的吗?我尝试要求我的组件的构造函数是这样的: 构造函数(@Inject(ORIGIN_URL)private _origin) 但是我得到错误“无法解析所有HomeComponent参数”。我试着将它添加到我的ngModule装饰器的Providers数组中,但是这似乎也没有改变错误。也许有一些我不知道的语法细节? –