簡體   English   中英

使用其他端口更新URL字符串

[英]update URL string with different port

在我的程序中,我得到了如下格式的URL,當我使用url.parse時,什么也沒發生,我需要更改端口,它建議如何執行此操作?

端口在冒號%3 55123之后,我需要將其更改為8080

  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'

最后一部分有一點技巧。 更新portparts對象將如下所示

{
  // ...
  host: 'mo-de73.mo.bmw.corp:55123',
  port: '8080',
  hostname: 'mo-de73.mo.bmw.corp',
  // ...
}

hostname正確,但是host仍在其中進行了硬編碼的端口。 如果僅使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM