jleatham
jleatham

Reputation: 486

nodejs xhr POST

I am using nodejs and trying to make a POST command to a server. I am also using node-xmlHttpRequest (driverdan's module). I am having issues with the content-type and get the error:

{
  "response":{
    "errorCode":"UNKNOWN_ERROR","message":"Content type 
    'text/plain;charset=UTF-8' not supported","detail":"Content type 
    'text/plain;charset=UTF-8' not supported"
  },"version":"1.0"
}

I need the content-type to be JSON, not text. I have tested the code with GET and it works fine.

Here is my code:

    var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
    var xhr = new XMLHttpRequest();
    var sys = require('util');
    var json_text2 = { "username": "admin","password": "-----" };
    var apicem_ip = "sandboxapic.cisco.com:9443";
    var apic_url = 'https://'+apicem_ip+'/api/v1/ticket';
    //- var xmlHTTP = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        sys.puts("State: " + this.readyState);

        if (this.readyState === 4) {
            sys.puts("Complete.\nBody length: " + this.responseText.length);
            sys.puts("Body:\n" + this.responseText);
        }
    };

    xhr.open("POST",apic_url,true);
    xhr.setRequestHeader("Content-type","application/json");
    xhr.setRequestHeader("Accept","application/json");
    xhr.responseType = 'JSON';
    xhr.send(JSON.stringify(json_text2));
    app.locals.apic_nd = xhr.responseText;

Any ideas?

Upvotes: 3

Views: 6694

Answers (1)

jleatham
jleatham

Reputation: 486

Thanks to jfriend00 I got it working (not sure how to upvote his comment. But here is the code I used:

var apicem_ip = "sandboxapic.cisco.com:9443";
var apic_url = 'https://'+apicem_ip+'/api/v1/ticket';

var request = require('request');

var options = {
  url: 'https://'+apicem_ip+'/api/v1/ticket',
  method: "POST",
  headers: {
    'Content-type': 'application/json'
  },
  body: '{ "username": "admin", "password": "----"}'
};

function callback(error, response, body) {
  console.log("callback function");
  if (!error) {
    var info = (JSON.parse(body));
    console.log(info);
    console.log("status 200");

  }
  else {
    console.log(JSON.parse(body));
  }
}

request.post(options, callback);

Upvotes: 3

Related Questions