Angular 服务器端渲染 (SSR) |如何获取域名

问题描述 投票:0回答:2

我的 Web 应用程序可通过多个域访问 (

example.com
example.org
example.net
)。

问题: 如何访问当前路由的域名?

请注意: 我使用 SSR(服务器端渲染),因此答案不能包含

window
或任何其他浏览器对象。

预期结果: 如果通过

example.org
访问应用程序并且当前路线是
www.example.org/frontpage

const domain = await someFunction()
console.log(domain);
// example.org
angular
2个回答
2
投票

这对我有用。我通过这种方式从请求中得到

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()
装饰器,否则你会得到一个错误。


0
投票

Angular 19 way(无需更改任何其他内容,现在请求可用):

...
export class AppComponent {
  private request = inject(REQUEST);

  constructor() {
    const hostname = this.request?.headers.get('x-forwarded-host');
  }
}
...
© www.soinside.com 2019 - 2024. All rights reserved.