Angular universal - 在服务器端获取当前 url

标签 angular angular-universal

问题可能很简单,但我无法在任何地方找到可行的解决方案。我有一个网站,我在其中设置了 Angular SSR,并希望在我的一个 Angular 组件中获取当前 url。我访问了多个站点,了解到我必须从通用服务器传递主机信息并在 Angular 组件中获取相同的信息。

我传递主机信息的 server.ts 文件中的代码片段

  // All regular routes use the Universal engine
  server.get('*', (req, res) => {
    res.render(indexHtml, {
      req,
      providers: [
        { provide: APP_BASE_HREF, useValue: req.baseUrl },
        { provide: 'host', useValue: req.get('host') }, // sending host name in provider
      ],
    });
  });

我的host.ts文件如下,

import { InjectionToken } from '@angular/core';
export const HOST_ID = new InjectionToken<string>('host');

这就是我尝试在 app component.ts 中获取主机名的方法,它总是给我 null 值。

export class AppComponent implements OnInit {
  isLoading: boolean = false;
  constructor(
    @Optional() @Inject(HOST_ID) private host: InjectionToken<string>
  ) {}

  ngOnInit(): void {
    if (platformServer) console.log(this.host);
  }

使用的 Angular 版本是 9。请有人阐明这个问题。非常感谢。

最佳答案

看起来你已经在看评论了,但我想知道你代码中的原始问题是否是你实际上没有在你的服务器中使用 HOST_ID 注入(inject) token 听众。

如果你把你的监听器改成这样:

// All regular routes use the Universal engine
server.get('*', (req, res) => {
  res.render(indexHtml, {
    req,
    providers: [
      { provide: APP_BASE_HREF, useValue: req.baseUrl },
      { provide: HOST_ID, useValue: req.get('host') }, // sending host name in provider
    ],
  });
});

我想你的问题会得到解决。

关于Angular universal - 在服务器端获取当前 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65769710/

相关文章:

angular - 服务器端渲染在 iis 中的 Angular 通用中不起作用

javascript - 在 Angular 8 中单击时在 NgOninit 中触发事件

javascript - 像 Angular5 中的 DOM 选择的 Jquery

html - 根据 Angular 6 中的条件更改 div 宽度

node.js - 将 Angular Universal 部署到共享托管,无需 npm 或 node.js

Angular Universal Prerendering with httpClient 用于从/static/data.json 内容中获取数据

具有转移状态的 Angular 通用 flickring

javascript - 向 Javascript 日期添加时间

html - *ngFor 仅打印数组的第一个元素