Node.js url.parse result обратно в строку
Я пытаюсь сделать простую разбивку на страницы.
С этой целью я пытаюсь проанализировать текущий URL-адрес, а затем создать ссылки на один и тот же запрос, но с добавленными и уменьшенными параметрами page
.
Я пробовал сделать следующее, но он создает ту же ссылку без нового параметра page
.
var parts = url.parse(req.url, true);
parts.query['page'] = 25;
console.log("Link: ", url.format(parts));
Документация для модуля URL кажется, что format
- это то, что мне нужно, но я делаю что-то неправильно.
Я знаю, что могу итерации и создавать строку вручную, но я надеялся, что существует существующий метод для этого.
Ответы
Ответ 1
Если вы посмотрите на последнюю документацию, вы увидите, что url.format
ведет себя следующим образом:
-
search
будет использоваться вместо query
-
query
(object; see querystring) будет использоваться, только если 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
Убедитесь, что вы всегда читаете последнюю версию документации, это сэкономит вам массу проблем.
Ответ 2
Мне кажется, что это ошибка в node. Вы можете попробовать
// 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));
Ответ 3
Другой ответ хорош, но вы также можете сделать что-то подобное. Модуль querystring
используется для работы с строками запроса.
var querystring = require('querystring');
var qs = querystring.parse(parts.query);
qs.page = 25;
parts.search = '?' + querystring.stringify(qs);
var newUrl = url.format(parts);
Ответ 4
Чтобы высушить код и получить переменные 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.