我有節點應用程序,並且我在某個標題下找到了以下網址,我需要解析它並將3000的內容更改爲4000,我該如何做,因爲我得到在req.headers.location
解析包含兩個網址字符串的網址
的問題是,我不能使用只需更換,因爲該值可以改變「兩節」的網址(dynmaic價值,目前其3000後可爲任意值...)
我有節點應用程序,並且我在某個標題下找到了以下網址,我需要解析它並將3000的內容更改爲4000,我該如何做,因爲我得到在req.headers.location
解析包含兩個網址字符串的網址
的問題是,我不能使用只需更換,因爲該值可以改變「兩節」的網址(dynmaic價值,目前其3000後可爲任意值...)
如果您始終需要更改的網址部分將成爲重定向的參數_uri,那麼你只需要找到它之後的第二個%3A的索引。
Javascript indexOf有第二個參數,它是'開始位置',因此您可以先對'redirect_uri ='字符串執行一次索引,然後將該位置傳遞給您對indexOf的下一次調用以查找第一個' %3A',然後將該結果傳遞到您的下一個呼叫中,即在您的'3000'之前出現的%3A。一旦你有你正在尋找令牌的位置,你應該能夠通過使用子字符串建立一個新的字符串...第一個子字符串將達到你的第二個%3A的結尾,第二個子字符串將來自它後面的%2F。
基本上,你將通過切割字符串,像這樣來建立你的字符串:
「%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));
謝謝,你能舉個例子,你如何將值從3000改爲4000? –
我試圖避免爲你做所有的工作,認爲這個解釋足以讓你開始。但我作爲編輯添加的代碼應該有所幫助。 – jcaruso
請將代碼段設置爲'code',看起來很糟糕 –
斯普利特返回字符串中的參數:
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
的字符串。
謝謝我嘗試,但我無法改變價值,任何想法? –
是否會改變redirect_uri網站。如果不是,你可以解析http%3AF%2Fmo-d6fa3.ao.tzp.corp – Ian