UNPKG

esb

Version:

enterprise service bus implementation

60 lines (57 loc) 1.76 kB
/** * Executor * Copyright(c) 2013 Netspedition Inc * MIT Licensed */ var request = require('request') const UNKNOWN_ERROR = 500 const SERVICE_NOT_AVAILABLE = 404 exports.invoke = function(service, protocol, cb) { var ret = {err: null, data: null} var method = protocol.payload.method; var params = protocol.payload.parameters; var serviceRequestUrl = service.endpoint + '/' + method if(params) { var validParameterCounter = 0; for(var i=0; i<params.length; i++) { if(params[i].name && params[i].value) { serviceRequestUrl += (validParameterCounter==0)?'?':'&'; serviceRequestUrl += params[i].name + '=' + params[i].value; validParameterCounter++ } } } request.get(serviceRequestUrl, function (error, response, body) { if(error) { console.log('ejsbjs Executor: ' + error); ret.err = {msg:'unknown error'} if(body) { try { ret.err.msg = JSON.parse(body); } catch(e) { console.log('Executor: cannot parse response: ' + body) } } else { if(error.code == 'ECONNREFUSED') ret.err.code = SERVICE_NOT_AVAILABLE } } else { if (response.statusCode == 200) { ret.data = body; } else if (response.statusCode == 404) { ret.err = {code: SERVICE_NOT_AVAILABLE, msg: 'wrong address / method'} } else { ret.err = {code: UNKNOWN_ERROR, msg: 'unknown error'} try { ret.err.msg = JSON.parse(body) ret.err.code = response.statusCode } catch(e) { if(body) console.log(body.substring(0, 255) + '...') // ignore non-json response parsing errors } } } if(ret.err) console.log(ret.err) // if(ret.data) console.log(ret.data) cb(ret.err, ret.data); }); }