如何更改(旧版)URL对象中的端口并对其进行字符串化?

时间:2018-03-20 17:35:56

标签: javascript node.js url

我试图在Node.js中更改(或添加)给定URL字符串中的端口值。

https://localhost:8080/index.html?query=value => https://localhost:9090/index.html?query=value

or

https://localhost/index.html?query=value => https://localhost:9090/index.html?query=value

仍然需要支持Node 6,我试图像这样使用the legacy URL API

> var parsed = url.parse('https://localhost:8080/index.html?query=value');
undefined
> parsed.port = '9090'
'9090'
> url.format(parsed)
'https://localhost:8080/index.html?query=value'

这似乎是由于url.format执行以下操作:

  

否则,如果urlObject.host属性值为truthy,则为值   将urlObject.host强制转换为字符串并附加到结果。

这促使我做了以下事情:

> var parsed = url.parse('https://localhost:8080/index.html?query=value');
undefined
> delete parsed.host
true
> parsed.port = '9090'
'9090'
> url.format(parsed)
'https://localhost:9090/index.html?query=value'

我做了我想要的,但感觉非常hacky,我不确定这样做可能产生的副作用。

是否有一种更简单,更惯用的方式来更改URL字符串中的端口而无需使用Regexes等?

1 个答案:

答案 0 :(得分:1)

您可以使用URL API - 尽管旧版本的Node可能不支持它。对于旧版本,您可以使用url-parse

等填充

示例:

var url = new URL("https://localhost:8080/index.html?query=value")
url.port = "9090"

var newUrl = url.toString()
// "https://localhost:9090/index.html?query=value