rapnc
Version:
Node client for RAP 1.0
104 lines (89 loc) • 2.79 kB
JavaScript
var express = require('express');
var http = require('http');
var path = require('path');
var fs = require('fs');
var config = require('../config.json');
var program = require('commander');
var helper = require('../helpers');
var logger = helper.logger;
var rapMode = config.mode != 'online' ? 'offline' : 'online';
function init(app) {
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
// routes
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// add error handler
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
}
function initDB() {
var Sequelize = require('sequelize'),
conn = config.dbinfo;
if (!conn) {
throw '[ERROR] ' + dbinfo + ' has no config in config.json.';
}
var sequelize = new Sequelize(conn.db, conn.user, conn.pass, {
host: conn.host,
port: conn.port,
define: {
charset: conn.charset
}
});
global.sequelize = sequelize;
};
function startServer(app, options) {
logger.log('')
if (options.mode == 'online') {
var conn = config.dbinfo;
logger.ok('Connecting DB: ' + conn.host + ':' + conn.port + '/' + conn.db, 'serve')
}
var port = options.port || app.get('port');
http.createServer(app).listen(port, function(){
logger.ok('RAPNC server listening on port ' + port + ' in "' + options.mode.toUpperCase() + '" mode.', 'serve');
});
}
function initServer(options) {
global.RAP_MODE = options.mode;
var app = express();
var server = http.createServer(app);
init(app);
require('../routes').init(app);
if (options.mode == 'online') {
initDB();
}
startServer(app, options);
}
function handle(argv) {
var options = {};
program
.usage('serve [options]')
.option('--online', '[online mode] connect to DB, read RAP data in DB.')
.option('--offline', '[offline mode] read local downloaded RAP files')
.option('--port [port]', 'rapnc server port, default: 3000', 3000)
.parse(argv);
if (argv.indexOf('-h') != -1 || argv.indexOf('--help') != -1) {
program.help();
process.exit(0);
}
if (program.online) {
options.mode = 'online';
}
if (program.offline) {
options.mode = 'offline';
}
if (program.port) {
options.port = program.port;
}
if (!program.online && !program.offline) {
options.mode = rapMode;
}
initServer(options);
}
exports.handle = handle;