Кодировать параметры запроса клиента в Node.js - PullRequest
0 голосов
/ 11 августа 2011

I нужен метод / реализация в Node.js , который получает хеш или массив и преобразует его в параметр запроса HTML, как jQuery.param ()

var myObject = {
  a: {
    one: 1, 
    two: 2, 
    three: 3
  }, 
  b: [1,2,3]
}; // => "a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3"

* Я просто не могу использовать его из jQuery, поскольку он зависит от собственных реализаций браузера.

1 Ответ

2 голосов
/ 12 августа 2011

Я не знаю такой встроенной функции или модуля, но вы можете использовать эту:

// Query String able to use escaping
var query = require('querystring');

function toURL(object, prefix)
{
  var result = '',
    key = '',
    postfix = '&';

  for (var i in object)
  {
    // If not prefix like a[one]...
    if ( ! prefix)
    {
      key = query.escape(i);
    }
    else
    {
      key = prefix + '[' + query.escape(i) + ']';
    }

    // String pass as is...
    if (typeof(object[i]) == 'string')
    {
      result += key + '=' + query.escape(object[i]) + postfix;
      continue;
    }

    // objectects and arrays pass depper
    if (typeof(object[i]) == 'object' || typeof(object[i]) == 'array')
    {
      result += toURL(object[i], key) + postfix;
      continue;
    }

    // Other passed stringified
    if (object[i].toString)
    {
      result += key + '=' + query.escape(object[i].toString()) + postfix;
      continue;
    }
  }
  // Delete trailing delimiter (&) Yep it's pretty durty way but
  // there was an error gettin length of the objectect;
  result = result.substr(0, result.length - 1);
  return result;
}

// try
var x = {foo: {a:{xxx:9000},b:2}, '[ba]z': 'bob&jhonny'};
console.log(toURL(x));
// foo[a]=1&foo[b]=2&baz=bob%26jhonny
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...