scriptbox
Version:
Script box is a full VAS application
146 lines (130 loc) • 4.66 kB
JavaScript
process.title = require("./package.json").name;
sys = require("util");
var
path = require('path'),
memory = require("./memory"),
fs = require('fs');
DEFAULT = {httpPort :13014,id : "OshiminSecret"};
var getDir = function (dbProdPath){
var pwd = process.cwd();
if(typeof __dirname != "undefined")
pwd = __dirname;
return String(dbProdPath).search(/^app:\/\//i) === 0 ?
path.resolve.apply(path,[path.sep].concat(String(dbProdPath).replace(/\//g,path.sep).replace("app:"+(path.sep),pwd).split(path.sep).slice(1)))
: dbProdPath
}
require("./settings");
var express = require("express"),
sessions = require('express-session'),
CaminteStore = require('connect-caminte')(sessions),
caminte = require('caminte'),
Schema = caminte.Schema,
db = {
driver : settings.dbType || "memory",
host : settings.dbHost || "",
port : settings.dbPort || "",
username : settings.dbUser || "",
password : settings.dbPwd || "",
database : settings.dbPath ? getDir(settings.dbPath) : "",
pool : settings.dbPool || false // optional for use pool directly
},
dbProd = {
driver : settings.dbProdType || "memory",
host : settings.dbProdHost || "",
port : settings.dbProdPort || "",
username : settings.dbProdUser || "",
password : settings.dbProdPwd || "",
database : settings.dbProdPath ? getDir(settings.dbProdPath) : "",
pool : settings.dbProdPool || false // optional for use pool directly
};
schema = new Schema(db.driver, db);
schemaProd = new Schema(dbProd.driver, dbProd);
__DIR = __dirname;
swig = require('swig');
swig.setFilter('inArray', function(arr, key){
return (arr && arr.indexOf ? (arr.indexOf(key) != -1) : false);
});
conf = {
http_port : process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || settings.httpPort || DEFAULT.httpPort
};
/* load models */
Models = {};
fs.readdirSync(path.join(__dirname,"models")).forEach(function(route){
require(path.join(__dirname,"models",route))(schema,schemaProd);
});
var server = express();
server.set('view cache', false);
//server.locals.cache = 'memory';
// To disable Swig's cache, do the following:
swig.setDefaults({ cache: false });
server.engine('html', swig.renderFile);
server.set('views', __dirname + '/views');
server.set('view engine', 'html');
//server.disable( 'x-powered-by' );
server.use(function (_, res, next) {
/*set header */
res.setHeader( 'Server', 'scriptbox' );
res.setHeader( 'X-Author', 'BADINGA BADINGA ULRICH ARTHUR' );
res.setHeader( 'X-Copy', '(c) Oshimin Labs 2014' );
res.removeHeader('X-Powered-By');
next();
});
server.use(require("morgan")(process.env.NODE_ENV || 'dev'));
server.use(require('cookie-parser')(DEFAULT.id));
server.use(require('body-parser')());
server.use(require('method-override')());
server.use(sessions({
secret: DEFAULT.id,
proxy: true,
resave: true,
saveUninitialized: true,
name: "osh",
store: new CaminteStore({
driver: db.driver,
collection: 'sessions',
db: db,
maxAge: 30000000, // 5h
clear_interval: 60 // 1 min
})
}));
server.use(require('serve-favicon')(__dirname + '/public/favicon.ico'));
//server.use(server.router);
/* add route loader */
var loadroute = function(dir,module){
var app;
module = module || "";
if(module)
app = express.Router();
fs.readdirSync(dir).forEach(function(route){
var file = path.join(dir,route);
if(fs.statSync(file).isDirectory())
return loadroute(file,path.join(module || "/",route).replace(path.sep,'/'));
require(file)(app || server, module || "/");
if(module)
server.use(module,app);
});
}
/* add public route */
loadroute(path.join(__dirname,"routes"));
//The 404 Route (ALWAYS Keep this as the last route)
server.get('*', function(req, res){
res.status(404);
return res.render("page-error",{error:{ code:404, message:req.url+" Not found"}});
});
server.use(function errorHandler(err, req, res, next) {
res.status(500);
res.render('page-error', { error: {code : 500, stack : "<pre>"+err.stack+"</pre>", message : err.message }});
})
server.listen(conf.http_port || DEFAULT.httpPort,function(err){
console.log("Server Listen "+(conf.http_port || DEFAULT.httpPort),"port.");
mem = memory.server();
});
process.on('exit', function(){
mem.close();
server.close();
});
function shutdown() {
server.close(); // socket file is automatically removed here
mem.close();
process.exit();
}