2017-01-10 8 views
0

Я пытаюсь вызвать внешний rest API с сервера узла с помощью модуля узла request.вызов внешнего остатка api из узла без параметров запроса querystring

let request = require('request'); 

var options = { 
    method: 'POST', 
    url: 'https://somerestURI:3000', 
    qs: { msg: 'some|data|for|other|server' } 
}; 

request(options, function (error, response, body) { 
    if (error) throw new Error(error); 

    console.log(body); 
}); 

Если я пытаюсь запустить приведенный выше код, значение строки запроса кодируются в

some%7cdata%7cfor%7cother%7cserver 

в результате я не получаю правильный ответ.

Но если я прогоню тот же запрос в POSTMAN. Я получаю ожидаемый результат (я думаю, почтальон не кодирует строку запроса).

Так что я хочу не кодировать значение строки запроса.

Любая помощь была бы принята с благодарностью.

ответ

2

Как ответил here, вы можете отключить encoding в qsStringifyOptions

var options = { 
    method: 'POST', 
    url: 'https://somerestURI:3000', 
    qs: { msg: 'some|data|for|other|server' }, 
    qsStringifyOptions: { 
     encoding: false 
    } 
}; 
+0

Спасибо за помощь ... Добавлено редактирование вы предложили, но не работает .... когда я копаться в исходный запрос кода этого является линия, которая кодирование значения строки запроса 'var qs = self._qs.stringify (base)', где он не проверяет qsStringifyOptions. – Vallabha

+0

Он работал в моем случае. –

+0

после добавления 'encoding: false'' url.parse' в 'request' модуль кодирует строку запроса – Vallabha

0

Вы можете использовать node-rest-client пакет. Он позволяет подключаться к любому REST API и получать результаты как javascript Object.

var HttpClient = require('node-rest-client').Client; 
var httpClient = new HttpClient(); 

// GET Call 
httpClient.get("http://remote.site/rest/xml/method", function (data, response) { 
     // parsed response body as js object 
     console.log(data); 
     // raw response 
     console.log(response); 
});) 

или POST Зов

var args = { 
    data: { test: "hello" }, 
    headers: { "Content-Type": "application/json" } 
}; 
//POST Call 
httpClient.post("http://remote.site/rest/xml/method", args, function (data, response) { 
     // parsed response body as js object 
     console.log(data); 
     // raw response 
     console.log(response); 
});