我的 Web 应用程序可通过多个域访问 (
example.com
example.org
example.net
)。
问题: 如何访问当前路由的域名?
请注意: 我使用 SSR(服务器端渲染),因此答案不能包含
window
或任何其他浏览器对象。
预期结果: 如果通过
example.org
访问应用程序并且当前路线是 www.example.org/frontpage
const domain = await someFunction()
console.log(domain);
// example.org
这对我有用。我通过这种方式从请求中得到
x-forwarded-host
:
在 server.ts:
server.get('*', (req, res) => {
const xForwardedHost = req.headers['x-forwarded-host'];
res.render(indexHtml, { req, providers: [
{ provide: APP_BASE_HREF, useValue: req.baseUrl },
{ provide: 'X_FORWARDED_HOST', useValue: xForwardedHost },
] });
});
然后在需要的地方注入
'X_FORWARDED_HOST'
,例如:
export class AppComponent {
constructor(
@Optional() @Inject('X_FORWARDED_HOST') private host: any,
) {
console.log('My host is',host);
}
}
由于
'X_FORWARDED_HOST'
仅在server.ts中定义,因此它仅存在于服务器中。在浏览器中它将为空,这就是为什么你应该使用 @Optional()
装饰器,否则你会得到一个错误。
Angular 19 way(无需更改任何其他内容,现在请求可用):
...
export class AppComponent {
private request = inject(REQUEST);
constructor() {
const hostname = this.request?.headers.get('x-forwarded-host');
}
}
...