2017-04-02 1 views
0

그래서 익스프레스 및 몽구스로 사용자 정의 페이지 매김 기능을 개발 중입니다. 페이지라는 get 매개 변수가 있고 모든 다른 페이지의 값을 변경해야합니다. 문제는 "& 페이지 = 1 & 페이지 = 1 & 페이지 = 1"과 같은 URL에 "페이지"키 - 값 쌍을 계속 추가하는 방식입니다.ExpressJS - get 요청 URL의 키 값을 변경하는 방법

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

가 난 그냥 "페이지"키의 값을 변경해야합니다 단순히 "페이지"의 값을 변경하지 마십시오하지만 매번과 같이 키 - 값 쌍을 추가하기 때문이다. 이것을 어떻게 할 수 있습니까? 모든 조언, 표현 보조 기능 또는 맞춤 솔루션은 많은 도움이됩니다. 미리 감사드립니다!

답변

1

, 당신은 .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));
,

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을받는 함수를 썼다 :


또한, 그 부분에 URL을 분석 한 부분을 변경할 수 url 라이브러리를 사용할 수 있습니다 후 전체 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')) 

OUTPUT

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

이 기능을 작성해 주셔서 감사합니다! 나는 그것을 테스트하고 작동합니다. 그러나 귀하의 URL이 http://example.com/animals/list/param1=5&page=3&type=dog와 같은 경우에는 작동하지 않습니다. /animals/list를/null/null로 만들고 작업을 중지합니다. – Codearts

+0

@Codearts 확실히, 나는'page'가 url get 파라미터라고 가정했다. –