Merge branch 'middleware_refactor'

v1.18.x
Julian Lam 12 years ago
commit aa731aa894

@ -26,7 +26,6 @@ var fs = require('fs'),
function(plugins, next) {
if (plugins && Array.isArray(plugins) && plugins.length > 0) {
async.each(plugins, function(plugin, next) {
// TODO: Update this check to also check node_modules
var pluginPath = path.join(__dirname, '../plugins/', plugin),
modulePath = path.join(__dirname, '../node_modules/', plugin);
if (fs.existsSync(pluginPath)) _self.loadPlugin(pluginPath, next);
@ -57,11 +56,13 @@ var fs = require('fs'),
if (global.env === 'development') winston.info('[plugins] Plugins OK');
_self.initialized = true;
_self.readyEvent.emit('ready');
});
},
ready: function(callback) {
this.readyEvent.once('ready', callback);
if (!this.initialized) this.readyEvent.once('ready', callback);
else callback();
},
initialized: false,
loadPlugin: function(pluginPath, callback) {

@ -22,7 +22,8 @@ var express = require('express'),
meta = require('./meta.js'),
feed = require('./feed'),
plugins = require('./plugins'),
nconf = require('nconf');
nconf = require('nconf'),
winston = require('winston');
(function (app) {
var templates = null,
@ -72,6 +73,10 @@ var express = require('express'),
};
// Middlewares
app.configure(function() {
async.series([
function(next) {
// Pre-router middlewares
app.use(express.compress());
app.use(express.favicon(path.join(__dirname, '../', 'public', 'favicon.ico')));
app.use(require('less-middleware')({
@ -81,7 +86,6 @@ var express = require('express'),
}));
app.use(nconf.get('relative_path'), express.static(path.join(__dirname, '../', 'public')));
app.use(express.bodyParser()); // Puts POST vars in request.body
app.use(express.cookieParser()); // If you want to parse cookies (res.cookies)
app.use(express.session({
store: new RedisStore({
@ -95,65 +99,40 @@ var express = require('express'),
}
}));
app.use(express.csrf());
// Local vars, other assorted setup
app.use(function (req, res, next) {
nconf.set('https', req.secure);
res.locals.csrf_token = req.session._csrf;
next();
});
// Static Directories for NodeBB Plugins
app.configure(function () {
var tailMiddlewares = [];
// Authentication Routes
auth.initialize(app);
next();
},
function(next) {
// Static Directories for NodeBB Plugins
plugins.ready(function () {
// Remove some middlewares until the router is gone
// This is not recommended behaviour: http://stackoverflow.com/a/13691542/122353
// Also: https://www.exratione.com/2013/03/nodejs-abusing-express-3-to-enable-late-addition-of-middleware/
tailMiddlewares.push(app.stack.pop());
tailMiddlewares.push(app.stack.pop());
tailMiddlewares.push(app.stack.pop());
for (d in plugins.staticDirs) {
app.use(nconf.get('relative_path') + '/plugins/' + d, express.static(plugins.staticDirs[d]));
winston.info('Static directory routed for plugin: ' + d);
}
// Push the removed middlewares back onto the application stack
tailMiddlewares.reverse();
app.stack.push(tailMiddlewares.shift());
app.stack.push(tailMiddlewares.shift());
app.stack.push(tailMiddlewares.shift());
});
});
module.exports.init = function () {
templates = global.templates;
// translate all static templates served by webserver here. ex. footer, logout
translator.translate(templates['footer'].toString(), function(parsedTemplate) {
templates['footer'] = parsedTemplate;
});
translator.translate(templates['logout'].toString(), function(parsedTemplate) {
templates['logout'] = parsedTemplate;
});
server.listen(nconf.get('PORT') || nconf.get('port'));
}
auth.initialize(app);
app.use(function (req, res, next) {
nconf.set('https', req.secure);
next();
});
},
function(next) {
// Router & post-router middlewares
app.use(app.router);
// 404 catch-all
app.use(function (req, res, next) {
res.status(404);
// respond with html page
if (req.accepts('html')) {
//res.json('404', { url: req.url });
res.redirect(nconf.get('relative_path') + '/404');
return;
}
@ -184,12 +163,35 @@ var express = require('express'),
});
});
next();
}
], function(err) {
if (err) {
winston.error('Errors were encountered while attempting to initialise NodeBB.');
} else {
winston.info('Middlewares loaded.');
}
});
});
module.exports.init = function () {
templates = global.templates;
// translate all static templates served by webserver here. ex. footer, logout
translator.translate(templates['footer'].toString(), function(parsedTemplate) {
templates['footer'] = parsedTemplate;
});
translator.translate(templates['logout'].toString(), function(parsedTemplate) {
templates['logout'] = parsedTemplate;
});
server.listen(nconf.get('PORT') || nconf.get('port'));
}
app.create_route = function (url, tpl) { // to remove
return '<script>templates.ready(function(){ajaxify.go("' + url + '", null, "' + tpl + '");});</script>';
};
app.namespace(nconf.get('relative_path'), function () {
auth.create_routes(app);

Loading…
Cancel
Save