2017-02-15 9 views
1

Я использую модуль узла «запрос», чтобы сделать запрос POST, и даже после того, как попытки много различных вариаций типов контента, например:NodeJS «запрос»: HTTP POST возвращает 415

'content-type': 'application/json' 

Я все еще получая ответ 415 (неподдерживаемый тип носителя). Ниже моя функция:

var createNetworkResource = function (resourceName, inputDirectory) { 
     request.post({url:browser.params.baseRestUrl + 'resources/connections', auth: browser.params.auth, 
       form: {method:'POST', headers: {'content-type': 'application/json'}, 
         displayName: "RESOURCE_TEST", name: "RESOURCE_TEST", type: "NETWORK", 
     }}, 
      function(e,r,user){ console.log("Status code of createNetworkResource('" + resourceName + "'): " + r.statusCode);}); 
    }; 

Я пробовал разные решения от StackOverflow, но ни один из них не работает, и я не мог найти специфичную для данного модуля узла.

ответ

1

Недвижимость form в request устанавливает тип контента application/x-www-form-urlencoded.

Используя json: true и указав body: {}, вы добавите заголовок Content-type: application/json и преобразуете запрос в строку JSON.

function createNetworkResource (resourceName, inputDirectory) { 
    request.post({ 
     url: browser.params.baseRestUrl + 'resources/connections', 
     auth: browser.params.auth, 
     json: true, 
     body: { 
     displayName: "RESOURCE_TEST", 
     name: "RESOURCE_TEST", 
     type: "NETWORK" 
     } 
    }, 
    function(error, response, user){ 
     if (error) return console.error('error(%s):', resourceName, error) 
     console.log("Status code of createNetworkResource(%s): %s", resourceName, response.statusCode) 
    } 
); 
}; 
+0

Ваше предложение верное: мне пришлось скопировать и вставить пример параметра «тело», чтобы заставить его работать (я предполагаю, что у меня были некоторые обязательные параметры). – Tom