2015-08-19 76 views
0

我有節點應用程序,並且我在某個標題下找到了以下網址,我需要解析它並將3000的內容更改爲4000,我該如何做,因爲我得到在req.headers.location解析包含兩個網址字符串的網址

http://to-d6faorp:51001/oauth/auth?response_type=code&redirect_uri=http%3AF%2Fmo-d6fa3.ao.tzp.corp%3A3000%2Flogin%2Fcallback&client_id=x2.node

的問題是,我不能使用只需更換,因爲該值可以改變「兩節」的網址(dynmaic價值,目前其3000後可爲任意值...)

+0

是否會改變redirect_uri網站。如果不是,你可以解析http%3AF%2Fmo-d6fa3.ao.tzp.corp – Ian

回答

0

如果您始終需要更改的網址部分將成爲重定向的參數_uri,那麼你只需要找到它之後的第二個%3A的索引。

Javascript indexOf有第二個參數,它是'開始位置',因此您可以先對'redirect_uri ='字符串執行一次索引,然後將該位置傳遞給您對indexOf的下一次調用以查找第一個' %3A',然後將該結果傳遞到您的下一個呼叫中,即在您的'3000'之前出現的%3A。一旦你有你正在尋找令牌的位置,你應該能夠通過使用子字符串建立一個新的字符串...第一個子字符串將達到你的第二個%3A的結尾,第二個子字符串將來自它後面的%2F。

基本上,你將通過切割字符串,像這樣來建立你的字符串:

http://to-d6faorp:51001/oauth/auth?response_type=code&redirect_uri=http%3AF%2Fmo-d6fa3.ao.tzp.corp%3A

「%2Flogin%2Fcallback &的client_id = x2.node」

...並附上你試圖輸入的任何端口號。

希望這會有所幫助。

此代碼應得到你想要的東西:

var strURL = "http://to-d6faorp:51001/oauth/auth?response_type=code&redirect_uri=http%3AF%2Fmo-d6fa3.ao.tzp.corp%3A3000%2Flogin%2Fcallback&client_id=x2.node"; 

var strNewURL = strURL.substring(0,strURL.indexOf("%3A", strURL.indexOf("%3A", strURL.indexOf("redirect_uri") + 1) + 1) + 3) + "4000" + strURL.substring(strURL.indexOf("%2F",strURL.indexOf("%3A", strURL.indexOf("%3A", strURL.indexOf("redirect_uri") + 1) + 1) + 3)); 
+0

謝謝,你能舉個例子,你如何將值從3000改爲4000? –

+0

我試圖避免爲你做所有的工作,認爲這個解釋足以讓你開始。但我作爲編輯添加的代碼應該有所幫助。 – jcaruso

+0

請將代碼段設置爲'code',看起來很糟糕 –

0

斯普利特返回字符串中的參數:

var parts = req.headers.location.split("&"); 

然後將零件拆分成字段名和變量:

var subparts = []; 
for (var i = 1; i < parts.length; i++) 
    subparts[i] = parts[i].split("="); 

然後檢查哪個字段名稱等於redirect_uri

var ret = -1; 
for (var i = 0; i < subparts.length; i++) 
    if (subpart[i][0] == "redirect_uri") 
     ret = i; 

if (ret == -1) 
    // didnt find redirect_uri, somehow handle this error 

現在您知道哪個子部分包含redirect_uri

因爲我不知道redirect_uri後面的規則是什麼,我不能告訴你如何得到這個值,這就是你的任務,但是問題被隔離到subparts[ret][1]。那是包含redirect_uri的字符串。

+0

謝謝我嘗試,但我無法改變價值,任何想法? –