Refactoring server application service to enable modularity and callbacks, as well as provide app, db, config variables outside of server.js

This commit is contained in:
Liran Tal
2015-07-30 11:38:21 +03:00
parent 40878bb076
commit edb62344bc
4 changed files with 71 additions and 36 deletions

52
config/lib/app.js Normal file
View File

@@ -0,0 +1,52 @@
'use strict';
/**
* Module dependencies.
*/
var config = require('../config'),
mongoose = require('./mongoose'),
express = require('./express'),
chalk = require('chalk');
// Initialize Models
mongoose.loadModels();
module.exports.loadModels = function loadModels() {
mongoose.loadModels();
};
module.exports.init = function init(callback) {
mongoose.connect(function (db) {
// Initialize express
var app = express.init(db);
if (callback) callback(app, db, config);
});
};
module.exports.start = function start(callback) {
var _this = this;
_this.init(function(app, db, config) {
// Start the app by listening on <port>
app.listen(config.port, function() {
// Logging initialization
console.log('--');
console.log(chalk.green(config.app.title));
console.log(chalk.green('Environment:\t\t\t' + process.env.NODE_ENV));
console.log(chalk.green('Port:\t\t\t\t' + config.port));
console.log(chalk.green('Database:\t\t\t\t' + config.db.uri));
if (process.env.NODE_ENV === 'secure') {
console.log(chalk.green('HTTPs:\t\t\t\ton'));
}
console.log('--');
if (callback) callback(app, db, config);
});
});
};

View File

@@ -30,9 +30,6 @@ module.exports.connect = function(cb) {
// Enabling mongoose debug mode if required
mongoose.set('debug', config.db.debug);
// Load modules
_this.loadModels();
// Call callback FN
if (cb) cb(db);
}

View File

@@ -234,6 +234,20 @@ module.exports = function (grunt) {
});
});
grunt.task.registerTask('server', 'Starting the server', function() {
// Get the callback
var done = this.async();
var path = require('path');
var app = require(path.resolve('./config/lib/app'));
var server = app.start(function() {
done();
});
});
// Lint CSS and JavaScript files.
grunt.registerTask('lint', ['sass', 'less', 'jshint', 'csslint']);
@@ -241,10 +255,9 @@ module.exports = function (grunt) {
grunt.registerTask('build', ['env:dev', 'lint', 'ngAnnotate', 'uglify', 'cssmin']);
// Run the project tests
grunt.registerTask('test', ['env:test', 'lint', 'mkdir:upload', 'copy:localConfig', 'mongoose', 'mochaTest', 'karma:unit']);
grunt.registerTask('test:server', ['env:test', 'lint', 'mongoose', 'mochaTest']);
grunt.registerTask('test:client', ['env:test', 'lint', 'mongoose', 'karma:unit']);
grunt.registerTask('test', ['env:test', 'lint', 'mkdir:upload', 'copy:localConfig', 'server', 'mochaTest', 'karma:unit']);
grunt.registerTask('test:server', ['env:test', 'lint', 'server', 'mochaTest']);
grunt.registerTask('test:client', ['env:test', 'lint', 'server', 'karma:unit']);
// Run the project in development mode
grunt.registerTask('default', ['env:dev', 'lint', 'mkdir:upload', 'copy:localConfig', 'concurrent:default']);

View File

@@ -3,32 +3,5 @@
/**
* Module dependencies.
*/
var config = require('./config/config'),
mongoose = require('./config/lib/mongoose'),
express = require('./config/lib/express'),
chalk = require('chalk');
/**
* Main application entry file.
* Please note that the order of loading is important.
*/
// Initialize mongoose
mongoose.connect(function (db) {
// Initialize express
var app = express.init(db);
// Start the app by listening on <port>
app.listen(config.port);
// Logging initialization
console.log('--');
console.log(chalk.green(config.app.title));
console.log(chalk.green('Environment:\t\t\t' + process.env.NODE_ENV));
console.log(chalk.green('Port:\t\t\t\t' + config.port));
console.log(chalk.green('Database:\t\t\t\t' + config.db.uri));
if (process.env.NODE_ENV === 'secure') {
console.log(chalk.green('HTTPs:\t\t\t\ton'));
}
console.log('--');
});
var app = require('./config/lib/app');
var server = app.start();