从 Angular 5 Universal 获取域名始终返回 127.0.0.1

2023-12-01

我在 Angular 5 应用程序的服务器端渲染方面遇到问题。我需要域来创建正确的链接(应用程序在不同的环境中使用,并且为每个端点创建几个包是个坏主意)。

所以我尝试使用堆栈中的选项,但我总是得到 127.0.0.1:4000 作为域/主机。我认为最好的选择应该是:

服务器.ts

app.engine('html', (_, options, callback) => {
    const engine = ngExpressEngine({
        bootstrap: AppServerModuleNgFactory,
        providers: [
            { provide: 'request', useFactory: () => options.req, deps: [] },
            provideModuleMap(LAZY_MODULE_MAP)
        ]
    });
    engine(_, options, callback);
});

在 app.component.ts 中:

   constructor(@Inject(PLATFORM_ID) private platformId,
                private injector: Injector) {

        if (isPlatformServer(this.platformId)) {
            let req = this.injector.get('request');
            console.log("host: " + req.get('host'));
        } else {
            console.log('we\'re rendering from the browser, there is no request object.');
        }
    }

我也检查对象option来自 NodeJS -> 它没有任何有关域的信息。host在那里定义为127.0.0.1:4000。我不知道如何从 NodeJS 获取它。你能帮忙或者给点小建议吗?

也许我的错是我的 Nginx 配置错误?

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name mock.test.com;

    ssl_certificate /home/xxx/Projects/xsw/cert/certificate.chained.crt;
    ssl_certificate_key /home/xxx/Projects/xsw/cert/key.prv;

    root /home/xxx/Projects/xsw/;
    index index.html;

    location / {
        proxy_pass http://127.0.0.1:4202;
    }

}

今天我损失了大约 10 个小时,但最终我找到了解决方案。我的问题与 nginx 配置有关。

当我使用时:

location / {
    proxy_pass http://127.0.0.1:4000;
}

Nginx 将请求中的主机更改为 127.0.0.1:4000。因此,解决方案是将 nginx proxy 编辑为:

location / {
    proxy_pass http://127.0.0.1:4000;
    proxy_set_header Host example.com;
    proxy_set_header HTTPS on;
}

我没有更改我的 Express Node.js 服务器中的任何内容:

服务器.ts

app.engine('html', (_, options, callback) => {
    const engine = ngExpressEngine({
        bootstrap: AppServerModuleNgFactory,
        providers: [
            { provide: 'request', useFactory: () => options.req, deps: [] },
            provideModuleMap(LAZY_MODULE_MAP)
        ]
    });
    engine(_, options, callback);
});

在我的 app.component.ts 中,我使用以下配置:

   private domain: string;

   constructor(@Optional() @Inject(REQUEST) private request: any,
               @Inject(PLATFORM_ID) private platformId,
               private injector: Injector) {

        if (isPlatformServer(this.platformId)) {
            if (this.request.get('https')) {
                this.domain = 'https://' + this.request.get('host');
            } else {
                this.domain = 'http://' + this.request.get('host');
            }
        } else {
            this.domain = document.location.protocol + '//' + document.location.hostname;
        }
    }

为了创建这个答案,我使用了 StackOverflow 的另一个答案:https://stackoverflow.com/a/47434417/2972087以及 Nginx 文档的一部分:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Angular 5 Universal 获取域名始终返回 127.0.0.1 的相关文章

随机推荐

  • 将命令添加到 Tkinter OptionMenu?

    我正在用 Python 2 7 8 编写一些代码 其中包括OptionMenu小部件 我想创建一个OptionMenu当选项更改时调用函数 但我也希望在列表中找到可能的选项 作为我的最终选项OptionMenu会有很多选择 我使用以下代码创
  • 在 postgres 中,使用表达式 array[] 与使用带有 {} 的数组的字符串表示形式有什么区别吗?

    使用两种不同的语法引用或创建数组有什么区别 array 1 2 3 vs 1 2 3 使用两者有什么好处吗 The ARRAY is the 表达与值构造函数 这 是字符串文字 constant 处理过程略有不同 但对于几乎用例来说 没有任
  • Launch4j / Windres:如何正确设置路径?

    我为我的项目配置了 launch4j 当我在 windowsXP 上开发时 我又使用了它 它在那里工作 现在我也需要它在 mac 上构建 我的build xml
  • 在 Mootools 中解析 XML

    似乎没有任何关于在 Mootools 中解析 XML 的有用文档 要么它太简单了 没有人愿意提及它 要么它太难了 每个人都放弃了尝试 有没有人有任何简单的跨浏览器方法来使用 Mootools 解析 XML 这是我的小 XML 文件 data
  • 将一个数据帧拆分为多个数据帧

    我有一个数据框 需要根据正则表达式搜索将其拆分为多个数据框 搜索没有固定的模式 即有时只有一个正则表达式 有时是多个正则表达式的组合 这是一个仅提取一组行的最小示例 Name lt c John Jane Arthur Maggie Age
  • 使用 Azure Active Directory 对用户进行身份验证后执行代码

    我使用 VS2015 创建了一个 ASP NET MVC Core 1 1 0 应用程序 在对话框中 我选择了连接到 Azure AD 的选项 因此 VS 生成了样板代码 并且正如预期的那样 应用程序将我重定向到 Microsoft 的登录
  • 插入一个元素

    Javascript中是否有一种方法可以在当前节点之后插入一个元素 我知道有一种方法可以在XML的当前节点之前插入一个元素 但是有没有一种方法可以在当前节点之后插入一个元素 在当前节点之后 只需获取当前节点的下一个兄弟节点并在该节点之前插入
  • 对单表使用 Merge 语句

    是否可以对单表使用merge语句 我想在插入之前检查是否已存在相同的值集 则应更新该记录 如果不存在 则应插入该记录 我在互联网上搜索过 但我得到了带有 2 个表的合并语句的示例 我在一张桌子上尝试过 但无法获得积极的结果 我试图检查的值将
  • Realm 数据库中的搜索操作速度

    这是我的模型RealmObject class public class ARDatabase extends RealmObject PrimaryKey private String uid private String namex p
  • 未捕获的类型错误:无法调用未定义的方法“hasChildNodes”

    我正在尝试使用 jquery 中的 ajax 请求读取 XML 下面是代码 它在 IE 中工作正常 但是当我在 Chrome 上运行它时 我遇到了这个错误 未捕获的类型错误 无法调用未定义的方法 hasChildNodes ajax typ
  • 如何从 querySelectorAll 获取所有元素并与 addEventListener 一起使用

    我有一个块 当我单击加号时 会创建 4 个子块 当我单击任何子块加号按钮时 我必须添加 rooms guests plus类 它们增加自0 to 5当单击减号按钮时 rooms guests minus类 以同样的方式减少 const ro
  • 在 Android 上运行模拟器时出错

    我正在尝试在 Android 上运行 PhoneGap 应用程序 当我运行命令时 phonegap run android emulator verbose 我收到这个错误 Running command getprop emu uuid
  • 具有连续分隔符的 strtok_s 行为

    我正在并行解析 3 个值 这些值用特定的分隔符分隔 token1 strtok s str1 separator nextToken1 token2 strtok s str2 separator nextToken2 token3 str
  • Python“使用错误的参数类型调用”错误

    我明白为什么我会收到此错误 它正在寻找我的对象作为参数 并接收字符串值 但我很困惑 不知道解决方案是什么 以下代码片段只是尝试运行此命令 self buttonGroup addButton self ui m001 x 次数 num 0
  • 如何在 Struts 2 中使用 DispatcherListener

    有一个界面DispatcherListener在Struts2中 文档说 一个接口来标记那些想要在init and destroy of a Dispatcher 但是这个接口怎么用呢 如果我创建一个实现这个接口的类 我应该如何将它配置到S
  • 我如何使用空手道测试以 AVRO 格式给出响应的其余端点?

    Karate 对于验证我们提供 json 响应的其余 api 非常有帮助 现在我们有了 api 它可以为我们提供 avro 格式的响应 可能还需要以 avro 格式发送有效负载 我如何使用空手道测试以 AVRO 格式给出响应的其余端点 有什
  • Python/Pandas:如果列有多个值,则转换为列表中具有多个值的单行

    在我的数据框中 我有很多相同的实例AutoNumber有不同的KeyValue String 我想将这些实例转换为单行 其中KeyValue String是由多个唯一值组成的列表 AutoNumber KeyValue String Ref
  • 如何连续向下滚动页面直到找到某个元素? Python 硒

    我对 Linkedin 技能部分的加载更多按钮感到困惑 我在查找按钮的 xpath 时收到此错误 selenium common exceptions NoSuchElementException Message no such eleme
  • xmlHttpRequest abort() 方法不会关闭 Internet Explorer 中的连接

    我有多个xmlHttpRequest在我的页面上 我正在尝试调用abort 对他们所有人的方法 在 FF 中效果很好 另一方面 IE 却没有做任何该死的事情 连接不会关闭 并且在请求完成之前我无法导航到另一个页面 这是什么 为什么 IE 不
  • 从 Angular 5 Universal 获取域名始终返回 127.0.0.1

    我在 Angular 5 应用程序的服务器端渲染方面遇到问题 我需要域来创建正确的链接 应用程序在不同的环境中使用 并且为每个端点创建几个包是个坏主意 所以我尝试使用堆栈中的选项 但我总是得到 127 0 0 1 4000 作为域 主机 我