UNPKG

enhancer-data-bridge

Version:

A bridge between Enhancer Clould and user business datasource

80 lines (70 loc) 2.5 kB
var logger = require('log4js').getLogger('io'); var request = require('request'); var pattern = { variableAndIdentifier: /(@(\d+-)?\w+(\.\w+)*@)|(\$(\d+-)?\w+(\.\w+)*\$)/g, variable: /@(\d+-)?\w+(\.\w+)*@/g, clientVariable: /(@\d+-\w+(\.\w+)*@)|(\$\d+-\w+(\.\w+)*\$)/g, identifier: /\$(\d+-)?\w+(\.\w+)*\$/g }; module.exports = { request: function(req, res, next) { // mock server vars for user debug var serverVars = req.body.serverVars; try { serverVars = JSON.parse(decodeURIComponent(serverVars)); } catch(e) { serverVars = {}; } var criteria; try { criteria = JSON.parse(req.body.criteria); } catch (e) { return res.end('Invalid criteria'); } // merge var params = criteria.params || {}; for (var i in serverVars) { params[i.toUpperCase()] = serverVars[i]; } var options = JSON.parse(req.body.httpOptions); if (!options.url) { return res.end('Invalid http proxy url'); } options.url = options.url.replace(pattern.variableAndIdentifier, function(s) { var name = s.split(/\@|\$/)[1].toUpperCase(); var val = params[name]; if (typeof val === 'object') { return encodeURIComponent(JSON.stringify(val)); } return encodeURIComponent(val); }); options.bodyContent = options.bodyContent.replace(pattern.variableAndIdentifier, function(s) { var name = s.split(/\@|\$/)[1].toUpperCase(); return options.contentType === 'application/json' ? JSON.stringify(params[name]) : encodeURIComponent(params[name]); }); request({ url: options.url, method: options.requestMethod, headers: { 'Cookie': options.mockCookie, 'Content-Type': options.contentType }, body: options.bodyContent, timeout: 3000, callback: function(err, res0) { if (err) { return res.jsonp({ success: false, message: err.message }); } res.jsonp({ success: true, data: res0.body }); } }); } };