blob: c237151eeaec19b2cc669faaaa7751f51ddf1a9f [file] [log] [blame]
/*
* Copyright (c) 2013 DataTorrent, Inc. ALL Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var express = require("express");
var app = express();
var ejs = require('ejs');
var fs = require('graceful-fs');
var path = require('path');
var Hash = require('hashish');
var httpProxy = require('http-proxy');
var browserify = require('browserify');
var util = require('./util');
// Dev configuration
var config = require('./config');
// Package
var pkg = require('./package.json');
// Set up the proxy that goes to the gateway
var proxy = new httpProxy.HttpProxy({
target: {
host: config.gateway.host,
port: config.gateway.port
}
});
// Set logger
app.use(express.logger());
// Configure the app
app.configure(function(){
// Set rendering engine to EJS
app.engine('html', ejs.renderFile);
app.set('view engine', 'ejs');
});
// REST API Requests
app.get('/ws/*', function(req, res) {
proxy.proxyRequest(req, res);
});
app.post('/ws/*', function(req, res) {
proxy.proxyRequest(req, res);
});
app.put('/ws/*', function(req, res) {
proxy.proxyRequest(req, res);
});
app.delete('/ws/*', function(req, res) {
proxy.proxyRequest(req, res);
});
// Main entry page
app.get('/', function(req, res) {
res.render('index', {
config: config,
pkg: pkg
});
});
// Browserify bundle
var b = browserify();
b.add('./js/start.dev.js');
app.get('/bundle.js', function(req, res) {
util.precompileTemplates();
res.setHeader("Content-Type", "text/javascript");
var bundle = b.bundle({
insertGlobals: true,
debug: true
});
bundle.on('error', function(e) {
res.end('$(function() { $("body").prepend("<p style=\'font-size:15px; padding: 10px;\'>' + e.toString() + '</p>"); });');
});
var data = '';
bundle.on('data', function(chunk) {
data += chunk;
});
bundle.on('end', function() {
res.end(data, 'utf8');
});
});
// Serve static files
app.use(express.static(__dirname, { maxAge: 86400000 }));
// Start the server
app.listen(config.web.port);
console.log("Server listening on port " + config.web.port);