2017-04-02 84 views
0

因此,我正在開發自定義分頁功能與快遞和貓鼬。我有一個稱爲頁面的get參數,我需要更改每個不同頁面的值。問題是,我這樣做,它不斷追加「頁面」鍵值對像這樣的網址「& page = 1 & page = 1 & page = 1」。那是因爲我不只是更改「頁」的價值,但我追加鍵值對像每一次這樣:ExpressJS - 如何更改獲取請求的url中的密鑰值

currentPageUrl: req.originalUrl + '&page=' + currentPage 

我只需要改變「頁」鍵的值。我怎樣才能做到這一點?任何建議,表達幫手功能或定製解決方案都會有很大幫助。提前致謝!

回答

1

如果您知道page=xxx參數是已經在那裏,你可以使用.replace()

currentPageUrl: req.originalUrl.replace(/page=[^&]+/, "page=" + currentPage) 

如果您不知道自己是否是有,那麼你必須首先測試它:

let newUrl; 
if (req.originalUrl.indexOf("page=") !== -1) { 
    newUrl = req.originalUrl.replace(/page=[^&]+/, "page=" + currentPage); 
} else if (req.originalUrl.indexOf("?") === -1) { 
    newUrl = req.originalUrl + "?page=" + currentPage); 
} else { 
    newUrl = req.originalUrl + "&page=" + currentPage); 
} 

各種測試情況:

function updatePage(origUrl, currentPage) { 
 
    let newUrl; 
 
    if (origUrl.indexOf("page=") !== -1) { 
 
     newUrl = origUrl.replace(/page=[^&]+/, "page=" + currentPage); 
 
    } else if (origUrl.indexOf("?") === -1) { 
 
     newUrl = origUrl + "?page=" + currentPage; 
 
    } else { 
 
     newUrl = origUrl + "&page=" + currentPage; 
 
    } 
 
    return newUrl; 
 
} 
 

 
// test cases 
 
console.log(updatePage("http://somedomain.com/somePath?page=3", 5)); 
 
console.log(updatePage("http://somedomain.com/somePath?whatever=something&page=3", 5)); 
 
console.log(updatePage("http://somedomain.com/somePath", 5)); 
 
console.log(updatePage("http://somedomain.com/somePath?page=3&whatever=something", 5));


您也可以使用url庫的URL解析成其組成部分,改變其中的一部分,然後重新生成完整的URL:

const url = require('url'); 

let parsedUrl = url.parse(req.originalUrl, true); 
parsedUrl.query.page = currentPage; 
delete parsedUrl.search; 
let newUrl = url.format(parsedUrl); 
+0

什麼,我覺得這個工作正常在我的情況。謝謝你幫忙! – Codearts

1

我寫了一個函數,它接受一個URL,一個參數和你想要的新值。我想,這不正是你想要

const url = require('url') 

uri = 'http://example.com/cat?page=1&rand=18347109823' 

function change_parameter(uri, parameter_name, new_value){ 
    parsed_uri = url.parse(uri, true) 
    parameters = [] 
    for (key in parsed_uri.query) { 
    if (key == parameter_name) { 
     parameters.push(key + "=" + new_value) 
    } else { 
     parameters.push(key + "=" + parsed_uri.query[key]) 
    } 
    } 
    return parsed_uri.protocol + "//" + parsed_uri.hostname + "?" + parameters.join("&") 
} 

console.log(change_parameter(uri, 'page', '3')) 

輸出

$ node so.js 
http://example.com?page=3&rand=18347109823 
+0

感謝您的時間寫這個功能!我測試了它,它工作。但是,當您的網址類似於http://example.com/animals/list/param1=5&page=3&type=dog時,它不起作用。 它使/動物/列表/ null/null /並停止工作。 – Codearts

+0

@Codearts當然,我認爲'page'是一個url獲取參數 –