plyql
Version:
A SQL-like interface for Plywood
63 lines (62 loc) • 2.13 kB
JavaScript
;
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;