Как я могу сделать этот запрос в nodejs (статус 415)?

Я использовал bash для выполнения задачи. И был некоторый беспорядок при попытке разобрать ответ. Теперь я использую nodejs для задачи. Но я получаю следующую ошибку:

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

Раньше это был мой запрос на завивание в файле bash:

 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){});

person Pravin    schedule 18.11.2015    source источник


Ответы (2)


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

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

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

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

person vmkcom    schedule 18.11.2015
comment
Я пробовал некоторые варианты, не работает. не могли бы вы показать небольшой код, пожалуйста? - person Pravin; 18.11.2015
comment
блин, простой stringify сделал свое дело. Я не сериализую объект. - person Pravin; 18.11.2015

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

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){});

Это помогло.

person Pravin    schedule 18.11.2015