Node.js url.parse result back to string

2019-03-18 03:04发布

I am trying to do some simple pagination. To that end, I'm trying to parse the current URL, then produce links to the same query, but with incremented and decremented page parameters.

I've tried doing the following, but it produces the same link, without the new page parameter.

var parts = url.parse(req.url, true);
parts.query['page'] = 25;
console.log("Link: ", url.format(parts));

The documentation for the URL module seems to suggest that format is what I need but I'm doing something wrong.

I know I could iterate and build up the string manually, but I was hoping there's an existing method for this.

标签: url node.js
4条回答
干净又极端
2楼-- · 2019-03-18 03:39

Simple git for this. To dry out code and get at URL variables without needing to require('url') I used: https://gist.github.com/4542588

This will parse and move the url variables into the req.urlparams variable. It runs early in the request workflow so is available for all expressjs paths.

查看更多
神经病院院长
3楼-- · 2019-03-18 03:50

If you look at the latest documentation, you can see that url.format behaves in the following way:

  • search will be used in place of query
  • query (object; see querystring) will only be used if search is absent.

And when you modify query, search remains unchanged and it uses it. So to force it to use query, simply remove search from the object:

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

Make sure you're always reading the latest version of the documentation, this will save you a lot of trouble.

查看更多
Viruses.
4楼-- · 2019-03-18 03:55

The other answer is good, but you could also do something like this. The querystring module is used to work with query strings.

var querystring = require('querystring');
var qs = querystring.parse(parts.query);
qs.page = 25;
parts.search = '?' + querystring.stringify(qs);
var newUrl = url.format(parts);
查看更多
虎瘦雄心在
5楼-- · 2019-03-18 04:03

Seems to me like it's a bug in node. You might try

// 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));
查看更多
登录 后发表回答