Angular 通用 SSR,第一次调用查找用户的 ip 是从服务器而不是客户端?

Angular universal SSR, first call to find user's ip went from server instead of client?

我们制作了 Angular 通用服务器端呈现应用程序,以便 html 标记显示在查看源代码中以用于 SEO 目的。我们在我们的应用程序中实施了本地化,以根据国家/地区提供数据。我们在应用程序开始时找到 ip,然后使用该 ip,获取特定国家/地区的数据。

问题是在 SSR 之后,应用程序首先从服务器呈现,然后 ip 调用从服务器发出并找到服务器的 ip。但是我们想要客户端浏览器的ip。他们有什么办法可以解决这个问题吗?

您需要向 angular 应用程序提供客户端 IP 地址

app.engine('html', (_, options, callback) =>
  ngExpressEngine({
    bootstrap: AppServerModuleNgFactory,
    providers: [
      provideModuleMap(LAZY_MODULE_MAP),
      {
        provide: 'clientIPAddress',
        useValue: options.req.connection.remoteAddress, //Provides the client IP address to angular
      },
    ],
  })(_, options, callback)
)

然后在您的 angular 应用中,注入该值

import { Injectable, Inject, Optional } from '@angular/core';


export class YourServiceOrComponent{
constructor(@Optional() @Inject('clientIPAddress') ipAddress: string) 
{
    if(ipAddress)
    {
        //Server side
    }
    else
    {
    //client side
    }
}