Monday, July 15, 2013

How to connect to WSO2 BAM with NodeJs using REST

Recently I wanted to use WSO2 BAM REST API to with NodeJs. After playing sometime with NodeJs API I was able to POST a stream definition to BAM using NodeJs with following method.

var https = require('https');

var auth = "Basic " + new Buffer('admin:admin').toString("base64"); //You  need to replace admin:admin with your username and password

// prepare the header
    var postheaders = {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        "Authorization": auth
    };

// the post options
    var optionspost = {
        host: '127.0.0.1',
        port: '9443',
        path: '/datareceiver/1.0.0/streams/',
        method: 'POST',
        rejectUnauthorized: 'false',
        headers: postheaders

    };

doPOSTRequest=function(optionspost,jsonObject){
    // do the POST call
    var reqPost = https.request(optionspost, function(res) {
        console.log("statusCode: ", res.statusCode);
        // uncomment it for header details
//  console.log("headers: ", res.headers);

        res.on('data', function(d) {
            console.info('POST result:\n');
            process.stdout.write(d);
            console.info('\n\nPOST completed');
        });
    });

    // write the json data
    reqPost.write(jsonObject);
    reqPost.end();
    reqPost.on('error', function(e) {
        console.error(e);
    });
}

An important ramark is you need to put rejectUnauthorized: 'false' if you are using NodeJs default Cas. Otherwise you may get an error saying [Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE]. This is because NodeJs rejects the certificate provided by BAM in default configuration. This tweak can be applied to any situation where you get the [Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE] when try to send a https request using NodeJs.

1 comment:

  1. The main idea of Node.js framework is use of non-blocking and event-driven I/O to remain insubstantial and efficient in the face of data-intensive real-time applications which run across distributed devices.

    ReplyDelete