我正在编写一个应用程序,它在不同的域中有一个客户端和一个api,如下所示:
[本地]
localhost:5000(客户端)
localhost:5001(api)
[网络]
app.domain.com(客户端)
api.domain.com(api)
现在,在编写我的获取请求时,我希望能够在我从localhost客户端发出请求时向localhost api发送请求,并在Web客户端请求时发送web api。要做到这一点,我必须能够设置我的基本网址,所以我正在尝试编写一个getApiDomain方法,我可以使用它来选择正确的域。
let fetchTask = fetch(`${Domain.getApiDomain()}/api/Item/${id}`)...
我的方法如下:
export abstract class Domain {
public static isLocalhost = Boolean(window.location.hostname === 'localhost' );
public static getApiDomain(): string {
return this.isLocalhost
? "http://localhost:5001"
: "http://api.domain.com";
}
}
这适用于客户端,但由于使用了窗口,我无法在SSR期间在服务器上工作。如何在服务器上执行时获取主机名?
答案 0 :(得分:2)
你可以做几件事,但最简单的是:
对于在请求之间不能更改的内容,您可以使用NodeJS中的globals
对象。因此,在服务器启动时,您可以检测到您是否在localhost上(可能带有CLI标志)并执行global.settings.ApiDomain = <URL>
。
然后在您的index.js
文件中,您可以执行以下操作:
window.settings.ApiDomain = window.location.hostname === 'localhost' ?
"http://localhost:5001" : "http://api.domain.com"
然后,无论何时需要使用ApiDomain,您都可以:
const apiDomain = window ? window.settings.ApiDomain : global.settings.ApiDomain