Node.js ExpressJS-如何更改get请求url中键的值

Node.js ExpressJS-如何更改get请求url中键的值,node.js,express,pagination,Node.js,Express,Pagination,因此,我正在使用express和mongoose开发自定义分页功能。我有一个名为page的get参数,需要更改每个不同页面的值。问题是,我这样做的方式会不断向url添加“page”键值对,如“&page=1&page=1&page=1”。这是因为我并不是简单地更改“page”的值,而是每次都像这样附加键值对: currentPageUrl: req.originalUrl + '&page=' + currentPage 我只需要更改“page”键的值。我怎样才能做到这一点?任何建议、

因此,我正在使用express和mongoose开发自定义分页功能。我有一个名为page的get参数,需要更改每个不同页面的值。问题是,我这样做的方式会不断向url添加“page”键值对,如“&page=1&page=1&page=1”。这是因为我并不是简单地更改“page”的值,而是每次都像这样附加键值对:

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

我只需要更改“page”键的值。我怎样才能做到这一点?任何建议、express helper函数或自定义解决方案都会有很大帮助。提前谢谢

尝试使用URL库。请参阅本页

你可以随意调整你的url


因此,在您的情况下,我将获得
url.origin
url.pathname
,但这取决于您想要获得的内容。

尝试使用url库。请参阅本页

你可以随意调整你的url


因此,在您的情况下,我会得到
url.origin
url.pathname
,但这取决于您想要得到什么。

如果您知道
page=xxx
参数已经存在,您可以使用
.replace()

如果您不确定它是否存在,则必须首先测试它:

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);
}
各种测试用例:

函数更新页(原始,当前页){
让newUrl;
if(origUrl.indexOf(“page=)!=-1){
newUrl=origUrl.replace(/page=[^&]+/,“page=“+currentPage”);
}else if(origUrl.indexOf(“?”)==-1){
newUrl=origUrl+“?page=“+currentPage;
}否则{
newUrl=origUrl+“&page=“+currentPage;
}
返回newUrl;
}
//测试用例
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));
如果您知道
page=xxx
参数已经存在,可以使用
.replace()

如果您不确定它是否存在,则必须首先测试它:

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);
}
各种测试用例:

函数更新页(原始,当前页){
让newUrl;
if(origUrl.indexOf(“page=)!=-1){
newUrl=origUrl.replace(/page=[^&]+/,“page=“+currentPage”);
}else if(origUrl.indexOf(“?”)==-1){
newUrl=origUrl+“?page=“+currentPage;
}否则{
newUrl=origUrl+“&page=“+currentPage;
}
返回newUrl;
}
//测试用例
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、一个参数和您想要的新值。我想这正是你想要的

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

我编写了一个函数,它接受一个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

感谢您花时间编写此函数!我对它进行了测试,效果良好。但是,当您的url类似于时,它就不起作用了。它使/animals/list变为/null/null/并停止工作。@Codearts毫无疑问,我假设
page
是一个url get参数。感谢您花时间编写此函数!我对它进行了测试,效果良好。但是,当您的url类似于时,它就不起作用了。它使/animals/list变为/null/null/并停止工作。@Codearts当然,我假设
page
是一个url get参数。我认为这在我的情况下可以正常工作。谢谢你的帮助!我认为这对我来说很好。谢谢你的帮助!