Javascript 使用不同的端口更新URL字符串
在我的程序中,我得到了如下格式的URL, 当我使用url.parse时,什么都没有发生,我需要更改端口,它建议如何做 端口位于冒号%3 55123之后,我需要将其更改为8080Javascript 使用不同的端口更新URL字符串,javascript,regex,node.js,Javascript,Regex,Node.js,在我的程序中,我得到了如下格式的URL, 当我使用url.parse时,什么都没有发生,我需要更改端口,它建议如何做 端口位于冒号%3 55123之后,我需要将其更改为8080 http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app 号码可以更改(任何有效端口),因此我无法使用替换 顺便说一句,有一个解析器可以将格式从%3更改为冒号,将%2F更改为斜杠,作为标准URL输出?在解析它之前
http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app
号码可以更改(任何有效端口),因此我无法使用替换
顺便说一句,有一个解析器可以将格式从%3更改为冒号,将%2F更改为斜杠,作为标准URL输出?在解析它之前,必须对其进行解码。您可以使用内置的
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'
最后一部分是一个小技巧。更新端口
后,您的部件
对象将如下所示
{
// ...
host: 'mo-de73.mo.bmw.corp:55123',
port: '8080',
hostname: 'mo-de73.mo.bmw.corp',
// ...
}
主机名
是正确的,但是主机
中仍然有硬编码的端口。如果您只是使用delete parts.host
删除主机,url.format
将使用{hostname}:{port}
自动创建正确的主机
也许有更好的方法,但至少这会让你开始。试试这个
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
非常感谢1+你能提供我如何更新端口的示例吗?非常感谢,在我更新端口后的最后一个问题,我想再次使用URL(使用更新的端口)如何执行?端口仅在对象部分发生了更改。端口,我需要以某种方式使用新端口获取更新的URL,有办法做到这一点吗?