wotcs-api-system
Version:
Base system used to build WoTcs clans and players API
71 lines (60 loc) • 2.34 kB
JavaScript
var Eventer = require('../base/eventer');
var express = require('express');
var http = require('http');
var path = require('path');
var _ = require("underscore");
module.exports = Eventer.extend({
init: function(config, rootDir) {
this.config = config;
this.expressApp = express();
this.rootDir = rootDir;
this.configureExpress();
this.configureServer();
},
configureExpress: function(){
var app = this.expressApp;
app.set('port', this.config.port);
app.set('views', path.join(this.rootDir, 'views'));
app.set('view engine', 'jade');
app.use(express.compress());
app.use(express.favicon(this.rootDir + '/public/images/favicon.ico'));
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.cookieParser(this.config.cookieSecret));
app.use(express.methodOverride());
app.use(app.router);
app.use(require('less-middleware')( path.join(this.rootDir, 'public') ));
app.use(express.static(path.join(this.rootDir, 'public')));
app.use(express.static(path.join(__dirname,'..','public')));
if(this.config.allowCrossDomain){
app.get('/*',function(req, res, next){
res.header('Access-Control-Allow-Headers', 'Content-Type, *');
res.header('Access-Control-Allow-Methods', 'GET');
res.header('Access-Control-Allow-Origin', '*');
next();
});
}
if ('production' != app.get('env')) {
app.use(express.errorHandler());
}
},
configureRoutes: function(router){
var app = this.expressApp;
_.each(router.routes, function(route, key) {
var path = key.split(' ')[1];
app[route.method](path, function(req, res){
router.route(route, req, res);
});
});
console.log('Server routes configured');
},
configureServer: function(){
var self = this;
var app = this.expressApp;
this.server = http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
self.emit('ready');
});
}
});