我正在尝试做一些简单的分页。
为此,我正在尝试解析当前的URL,然后生成指向同一查询的链接,但使用递增和递减的page
参数。
我已尝试执行以下操作,但它生成相同的链接,没有新的page
参数。
var parts = url.parse(req.url, true);
parts.query['page'] = 25;
console.log("Link: ", url.format(parts));
documentation for the URL module似乎表明format
是我需要的,但我做错了。
我知道我可以手动迭代并构建字符串,但我希望有一个现有的方法。
答案 0 :(得分:46)
如果查看latest documentation,您会发现url.format
的行为方式如下:
search
将用于代替query
query
(对象;请参阅查询字符串)仅在search
不存在时使用。
当您修改query
时,search
保持不变并使用它。因此,要强制它使用query
,只需从对象中删除search
:
var url = require("url");
var parts = url.parse("http://test.com?page=25&foo=bar", true);
parts.query.page++;
delete parts.search;
console.log(url.format(parts)); //http://test.com/?page=26&foo=bar
确保您始终阅读最新版本的文档,这样可以省去很多麻烦。
答案 1 :(得分:3)
对我而言似乎是节点中的错误。你可以试试
// in requires
var url = require('url');
var qs = require('querystring');
// later
var parts = url.parse(req.url, true);
parts.query['page'] = 25;
parts.query = qs.stringify(parts.query);
console.log("Link: ", url.format(parts));
答案 2 :(得分:2)
另一个答案是好的,但你也可以这样做。 querystring
模块用于处理查询字符串。
var querystring = require('querystring');
var qs = querystring.parse(parts.query);
qs.page = 25;
parts.search = '?' + querystring.stringify(qs);
var newUrl = url.format(parts);
答案 3 :(得分:0)
要干掉代码并获取URL变量而不需要('url')我使用过:
/*
Used the url module to parse and place the parameters into req.urlparams.
Follows the same pattern used for swagger API path variables that load
into the req.params scope.
*/
app.use(function(req, res, next) {
var url = require('url');
var queryURL = url.parse(req.url, true);
req.urlparams = queryURL.query;
next();
});
var myID = req.urlparams.myID;
这将解析并将url变量移动到req.urlparams变量中。它在请求工作流程的早期运行,因此可用于所有expressjs路径。