UNPKG

plyql

Version:

A SQL-like interface for Plywood

63 lines (62 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var http = require("http"); var express = require("express"); var bodyParser = require("body-parser"); var compress = require("compression"); function createJSONServer(port, queryProcessor) { var app = express(); app.disable('x-powered-by'); app.use(compress()); app.get('/health', function (req, res) { res.send("I am healthy @ " + new Date().toISOString()); }); app.use(bodyParser.json()); app.post('/plyql', function (req, res) { var sql = req.body.sql; if (typeof sql !== "string") { res.status(400).json({ error: "'sql' must be a string" }); return; } console.log("Got SQL: " + sql); queryProcessor({ sql: sql }, res); }); app.post('/plywood', function (req, res) { var expression = req.body.expression; if (typeof expression === "undefined") { res.status(400).json({ error: "'expression' must be defined" }); return; } console.log("Got expression"); queryProcessor({ expression: expression }, res); }); app.use(function (err, req, res, next) { res.status(err.status || 500); res.json({ error: err.message }); }); var server = http.createServer(app); server.on('error', function (error) { if (error.syscall !== 'listen') { throw error; } switch (error.code) { case 'EACCES': console.error("Port " + port + " requires elevated privileges"); process.exit(1); break; case 'EADDRINUSE': console.error("Port " + port + " is already in use"); process.exit(1); break; default: throw error; } }); server.on('listening', function () { var address = server.address(); console.log('PlyQL server listening on port: ' + address.port); }); app.set('port', port); server.listen(port); } exports.createJSONServer = createJSONServer;