将本地节点 JS HTTP 服务器端口(在电子中运行)传递给角度服务

Posted

技术标签:

【中文标题】将本地节点 JS HTTP 服务器端口(在电子中运行)传递给角度服务【英文标题】:Passing local node JS HTTP server port (running in electron) to angular service 【发布时间】:2017-09-06 23:08:09 【问题描述】:

我在电子应用程序的本地主机上运行 RESTful 节点 JS Http 服务器。我在端口 0 上监听,以便操作系统给我一个随机的空闲端口。如何访问我的 Angular 代码中的 givin 端口,以便能够知道我必须在哪个 URL 上执行 XHTTP 请求?

restapi 服务器 (nodejs) 在 127.0.0.1:0 上运行

var listener = app.listen(port, server, function() 
        port = listener.address().port;
        console.log('Listening on port ' + port + '@' + server); 
    );

XHTTP 角度调用

private heroesUrl = 'http://localhost:1337/api/heroes';

getHeroes(): Promise<Hero[]> 
    return this.http.get(this.heroesUrl).toPromise()
        .then(
            ((response) => response.json() as Hero[])
            )
        .catch(this.handleError);   

知道如何将固定端口 1337 替换为在服务器端打开侦听器时获得的端口吗?

或者我应该只使用两侧的固定端口并希望它免费?对我来说听起来不对。

我也不能只使用“/api/heroes”作为 URL,因为 electron/angular 正在 http://localhost:4200(ng serve)上运行。

【问题讨论】:

【参考方案1】:

在使用这种设置进行开发时,我通常使用固定端口,这样我就不用担心配置动态端口了。此外,根据您的 Angular 应用程序的配置方式,您可能需要设置代理。例如,如果您使用 angular-cli,以下是如何实现请求的功能。

https://github.com/angular/angular-cli/blob/d22e9ae73763923980fc1e59cfb2a0bf255b98d8/docs/documentation/stories/proxy.md

【讨论】:

如果我使用静态端口一切正常,但我真的不想这样做,因为我认为这不是一个最佳决定。如果我要使用代理的东西,我需要动态编辑代理json文件,可以吗? @capc0 为什么你认为使用动态端口比使用静态端口更好?它不是我以前见过的模式。我猜你可以创建某种 bash 脚本,从一台服务器获取端口输出并使用动态创建的代理 json 文件启动 angular 应用程序。但除非我遗漏了什么,否则我认为您使用非固定端口让事情变得过于复杂

以上是关于将本地节点 JS HTTP 服务器端口(在电子中运行)传递给角度服务的主要内容,如果未能解决你的问题,请参考以下文章

express.js 服务器在正在使用的端口上启动

无法使节点j在端口3000上运行

将所有请求通过管道传输到特定端口 - 节点 js 应用程序

Nginx 502 坏网关节点 JS

在Fedora 27上安装节点js服务器

Ngrok > Nginx > 本地主机端口