2015-11-18 2 views
0

Я использовал bash для выполнения задачи. И было немного беспорядка, пытаясь разобрать ответ. Теперь я использую nodejs для задачи. Но я получаю следующее сообщение об ошибке:Как я могу выполнить этот запрос в nodejs (статус 415)?

"httpStatus" : 415, 
"messages" : [ { 
    "errorCode" : "305", 
    "message" : "Unsupported media type 'application/x-www-form-urlencoded'" 
} ] 

Это используется, чтобы мой локон запрос в Баш файле:

curl --include\      
    --request POST \     
    --user "$USERNAME:$PASSWORD" \   
    --header "Content-Type: application/vnd.profitbricks.resource+json" \ 
    --data-binary "{    
     \"properties\": {   
      \"name\": \"$servername\",  
      \"ram\": $RAM, 
      \"cores\": $CORES  
     } 
    }" \      
    https://api.profitbricks.com/rest/datacenters/$ID/servers ; 

Это мой текущий запрос:

var request = require('request'); 
var reqoptions = {     
    method: 'POST',    
    uri: 'https://api.profitbricks.com/rest/datacenters/'+options.vdcID+'/servers', 
    form:{ 
    "properties":{ 
     "cores": options.cores, 
     "ram": options.ramsize, 
     "name": options.servername 
    } 
    }, 
    headers: {    
     'Authorization': 'Basic ' + new Buffer(options.user+':'+options.password).toString('base64'), 
     'Content-Type': 'application/vnd.profitbricks.resource+json' 
    } 
}; 

request(reqoptions, function(err, res, body){}); 

ответ

1

Проблема была сериализации. Я стягивал объект. Теперь это работает.

var request = require('request'); 
var body = { 
    "properties":{ 
     "cores": options.cores, 
     "ram": options.ramsize, 
     "name": options.servername 
    } 
    } 
var reqoptions = {     
    method: 'POST',    
    uri: 'https://api.profitbricks.com/rest/datacenters/'+options.vdcID+'/servers', 
    body: JSON.stringify(body), 
    headers: {    
     'Authorization': 'Basic ' + new Buffer(options.user+':'+options.password).toString('base64'), 
     'Content-Type': 'application/vnd.profitbricks.resource+json' 
    } 
}; 

request(reqoptions, function(err, res, body){}); 

Это сделало трюк.

1

form вариант изменения типа содержимого до form-urlencoded

Вы не должны использовать form i п Варианты запроса

написать двоичные данные, как здесь nodejs/express and binary data in POST

поэтому используйте body: myBuffer вместо form: {...}

+0

Я попробовал некоторое изменение, работа в целом. Вы могли бы показать небольшой код, пожалуйста? – Pravin

+0

проклятый, простой шнур сделал трюк. Я сериализую объект. – Pravin

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