2016-12-29 3 views
1

Я хочу отправить этот объект javascript в строку запроса, чтобы я мог использовать его в качестве объекта, когда он был получен сервером. В настоящее время я использую запрос XHR:Как отправить объект javascript в строку запроса?

 const xhr = new XMLHttpRequest(); 
     var params = { 
      searchParams: {name: 'Joe'}, 
      sortParam: {name: -1}, 
      skip: 0, 
      limit: 50 
     }; 
     xhr.open('get', '/api/endpoint' + formatParams(params)); 
     xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
     xhr.responseType = 'json'; 
     xhr.addEventListener('load',() => { 
      if (xhr.status === 200) { 
       ... 
      } 
      else{ 
       ... 
      } 
     }); 
     xhr.send(); 

Если функция formatParams выглядит следующим образом:

const formatParams = (params) => { 
    return "?" + Object 
      .keys(params) 
      .map(function(key){ 
       return key+"="+params[key] 
      }) 
      .join("&") 
}; 

На сервере я получаю запрос через экспресс-маршрутизатор, где параметры затем используются в запрос MongoDB:

const express = require('express'); 
const router = new express.Router(); 
router.get('/endpoint', (req, res) => { 
    console.log(req.query.searchParams); 
    ... 
}); 

в настоящее время сервер показывает req.query.searchParams как строка

[объект Object]

+0

что 'console.log (JSON.stringify (req.query.searchParams));' показ ? –

+1

Также: не форматируйте параметры, подобные этому. Они должны быть закодированы по URL-адресу. Если вы используете jquery, используйте его метод jquery.params, который делает тяжелую работу для вас. –

+0

Вам необходимо преобразовать ваш объект в JSON. Он использует собственный метод toString. – ste2425

ответ

1

Есть несколько вопросов здесь:

  1. key и params[key] должен быть URL-закодированы, вы можете использовать encodeURIComponent(...) для этого (это стандартная функция)
  2. Поскольку params[key] - это объект в двух случаях (searchParam, sortParam), представление строки будет [Объект объекта]. Вместо этого попробуйте: return encodeURIComponent(key) + '=' + encodeURIComponent(JSON.stringify(params[key]))
  3. На стороне сервера, вы, вероятно, нужно запустить JSON.parse(req.query.searchParams), чтобы получить объект назад
+0

Блестящий - спасибо! – JoeTidee

 Смежные вопросы

  • Нет связанных вопросов^_^