Node.js url.parse结果返回字符串

时间:2011-09-22 15:27:05

标签: url node.js

我正在尝试做一些简单的分页。 为此,我正在尝试解析当前的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是我需要的,但我做错了。

我知道我可以手动迭代并构建字符串,但我希望有一个现有的方法。

4 个答案:

答案 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路径。