使用不同的端口更新URL字符串

时间:2015-08-20 06:02:47

标签: 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输出?

2 个答案:

答案 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