Node.js url.parse результат обратно в строку - PullRequest
17 голосов
/ 22 сентября 2011

Я пытаюсь сделать простую нумерацию страниц. С этой целью я пытаюсь проанализировать текущий URL-адрес, затем создать ссылки на тот же запрос, но с увеличенными и уменьшенными page параметрами.

Я пытался сделать следующее, но он выдает ту же ссылку без нового параметра page.

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

Документация для модуля URL предполагает, что мне нужно format, но я делаю что-то не так.

Я знаю, что мог бы выполнить итерацию и создать строку вручную, но я надеялся, что для этого существует существующий метод.

Ответы [ 4 ]

47 голосов
/ 22 сентября 2011

Если вы посмотрите последнюю документацию , вы увидите, что 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

Убедитесь, что вы всегда читаете последнюю версию документации, это избавит вас от многих проблем.

3 голосов
/ 22 сентября 2011

Мне кажется, что это ошибка в узле. Вы можете попробовать

// 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 голосов
/ 22 сентября 2011

Другой ответ хорош, но вы также можете сделать что-то подобное. Модуль querystring используется для работы со строками запроса.

var querystring = require('querystring');
var qs = querystring.parse(parts.query);
qs.page = 25;
parts.search = '?' + querystring.stringify(qs);
var newUrl = url.format(parts);
0 голосов
/ 22 января 2013

Чтобы высушить код и получить переменные 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...