在我的程序中,我得到了以下格式的URL, 当我使用url.parse什么都没发生时,我需要更改端口,它是如何建议的那样做的?
该端口位于冒号%3 55123之后,我需要将其更改为8080
http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app
可以更改号码(任何有效端口),因此我无法使用替换
顺便说一下,解析器将格式从%3更改为冒号而%2F更改为斜杠作为标准URL输出?
答案 0 :(得分:0)
在解析它之前,必须对其进行解码。您可以使用内置的decodeURIComponent
函数执行此操作。
var url = require('url');
var encodedUrl = 'http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app';
var decodedUrl = decodeURIComponent(encodedUrl);
//=> 'http://mo-de73.mo.bmw.corp:55123/login/callback&client_id=s2.app'
var parts = url.parse(decodedUrl);
/* =>
{ protocol: 'http:',
slashes: true,
auth: null,
host: 'mo-de73.mo.bmw.corp:55123',
port: '55123',
hostname: 'mo-de73.mo.bmw.corp',
hash: null,
search: null,
query: null,
pathname: '/login/callback&client_id=s2.app',
path: '/login/callback&client_id=s2.app',
href: 'http://mo-de73.mo.bmw.corp:55123/login/callback&client_id=s2.app' }
*/
parts.port = 8080;
//=> 8080
delete parts.host;
//=> true
url.format(parts);
//=> 'http://mo-de73.mo.bmw.corp:8080/login/callback&client_id=s2.app'
最后一部分有一点黑客攻击。更新port
后,您的parts
对象将如下所示
{
// ...
host: 'mo-de73.mo.bmw.corp:55123',
port: '8080',
hostname: 'mo-de73.mo.bmw.corp',
// ...
}
hostname
是正确的,但host
仍有硬编码的端口。如果您只是使用delete parts.host
删除主机,url.format
将使用{hostname}:{port}
自动创建正确的主机。
也许有更好的方法来做到这一点,但至少这应该让你开始。
答案 1 :(得分:-1)
试试这个
var url="http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app";
url=url.replace('%3A55123',":8080");
var decodedUrl = decodeURIComponent(url);
//decodedUrl=http://mo-de73.mo.bmw.corp:8080/login/callback&client_id=s2.app