Node.js ExpressJS-如何更改get请求url中键的值
因此,我正在使用express和mongoose开发自定义分页功能。我有一个名为page的get参数,需要更改每个不同页面的值。问题是,我这样做的方式会不断向url添加“page”键值对,如“&page=1&page=1&page=1”。这是因为我并不是简单地更改“page”的值,而是每次都像这样附加键值对: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”键的值。我怎样才能做到这一点?任何建议、
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参数。我认为这在我的情况下可以正常工作。谢谢你的帮助!我认为这对我来说很好。谢谢你的帮助!