如何在Angular5的Elasticsearch.js客户端中排除主机端口号
解决Elasticsearch.js自动添加默认端口9200的问题
我明白你遇到的困扰了——Elasticsearch.js客户端在你配置空端口时,依然会自动补上默认的9200,导致请求地址不符合预期。这是因为当你在host对象中设置port: ''时,客户端会将空字符串视为无效值,转而使用Elasticsearch的默认端口9200,而非HTTPS的默认端口443。
下面给你两种可行的解决方案:
方案一:直接使用完整URL作为host参数
最简单的方式是直接把目标地址作为字符串传给host,这样客户端会完全按照你提供的地址发起请求,不会自动添加任何额外端口:
private connect() { this.client = new Client({ host: 'https://myelasticsearch-api.xyz.com/api1/1.0', headers: { 'authorization': 'Bearer ' + this.accessTolken }, log: 'warning' }); }
注意这里把headers直接放在顶层配置里,而非嵌套在host对象中——当使用字符串形式的host时,headers需要放在Client的根配置下才能生效。
方案二:正确配置host对象(使用HTTPS默认端口)
如果你更倾向于使用对象形式的host配置,可以明确指定port: 443(HTTPS的默认端口),或者干脆不设置port参数,客户端会自动根据协议匹配对应默认端口:
private connect() { this.client = new Client({ host: { host: 'myelasticsearch-api.xyz.com', protocol: 'https', port: 443, // 明确指定HTTPS默认端口,也可以直接删除这个参数 headers: { 'authorization': 'Bearer ' + this.accessTolken }, path: '/api1/1.0' }, log: 'warning' }); }
删除port参数后,客户端会自动适配协议的默认端口:HTTPS对应443,HTTP对应80,这样就不会再自动加上9200了。
另外提一句,你代码里的accessTolken可能是笔误,正确拼写应该是accessToken,不过这不会影响端口问题的解决。
内容的提问来源于stack exchange,提问作者MPPNBD
相关产品推荐
相关产品推荐

