'use strict'; var express = require('express'); var morgan = require('morgan'); var bodyParser = require('body-parser'); var _ = require('lodash'); var app = express(); var request = require('request'); app.use(morgan('combined')); app.use(bodyParser.json()); function setCORSHeaders(res) { res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Access-Control-Allow-Methods", "POST"); res.setHeader("Access-Control-Allow-Headers", "accept, content-type"); } app.all('/', function(req, res) { setCORSHeaders(res); res.send('https://grafana.com/plugins/grafana-simple-json-datasource\n'); res.end(); }); function search(url, body, res) { request.post( url, body, function (error, response, body) { if (!error && response.statusCode == 200) { if (result.length == 0) { result = JSON.parse(body); } else { result.concat(JSON.parse(body)); } if (res) { setCORSHeaders(res); res.json(result); res.end(); } } else { console.log(error); } } ); } function query(url, req, res) { request.post({ url: url, headers: req.headers, body: JSON.stringify(req.body) }, function (error, response, body) { if (!error && response.statusCode == 200) { if (queryResult.length == 0) { queryResult = JSON.parse(body); } else { queryResult.concat(JSON.parse(body)); } if (res) { setCORSHeaders(res); res.json(queryResult); res.end(); } } else { console.log(error); } } ); } var result = []; app.all('/search', function (req, res) { result = []; search('http://mysql_jsonendpoint:8000/search', req.body); search('http://mongodb_jsonendpoint:8000/search', req.body, res); }); var queryResult = []; app.all('/query', function (req, res) { queryResult = []; query('http://mysql_jsonendpoint:8000/query', req); query('http://mongodb_jsonendpoint:8000/query', req, res); }); app.listen(8000); console.log("Server is listening to port 8000");