Newer
Older
import url from 'url';
import debug from 'debug';
import path from 'path';
import mkdirp from 'mkdirp';
import express from 'express';
const log = debug('helper:express:module:info');
const error = debug('helper:express:module:error');
/**
* Load a devcontrol-module
* @extends Express
* @param {Object} app - expressjs object.
* @param {Object} config - helper.config instace.
* @param {string} ...args - will be redirected to route method of module
*/
export const moduleLoader = function(app, config, ...args) {
if('undefined' !== typeof config.url.favicon){
dbug('favicon was defined,'+config.url.favicon);
app.use(serveFavicon(config.url.favicon));
}
if ('undefined' !== typeof config.url.prependurl) {
for (let m in config.url.modules[m]) {
config.url.modules[m] = config.url.prependurl + config.url.modules[m];
}
}
for (let m in config.modules) {
try{
dbug('require module',m);
routes[m] = require(process.env.PWD + '/modules/' + m + '/route.js').default;
}catch(e){
dbug('require module from npm',m);
routes[m] = require(m).default;
}
}
app.use((req, res, next) => {
log(req.method, req.url);
if ('undefined' === typeof res.locals) {
res.locals = {};
}
// res.locals.baseHost = url.parse(config.url.baseurl);
res.locals.url = config.url;
res.locals.user = req.user;
next();
});
app.get('/', (req, res) => { res.redirect(config.url.home); });
function setConfig(config, m) {
return function(req, res, next) {
req.config = config.modules[m];
if ('undefined' === typeof res.locals) {
}
next();
}
}
app.set('view engine', 'pug');
let views = [ path.join(process.env.PWD, './views') ];
for (let m in config.modules) {
views.push(path.join(__dirname, m, 'views'));
let moduleconfig = Object.assign({url : config.url}, config.modules[m],
{baseurl : config.url.modules[m]});
let rout = routes[m](moduleconfig, ...args);
rout.use(setConfig(config, m));
if (moduleconfig.use) {
app.use(moduleconfig.baseurl, moduleconfig.use, rout);
} else {
app.use(moduleconfig.baseurl, rout);
}
try{
dbug('use static['+m+']','try local');
rout.use('/static',
express.static(process.env.PWD + '/modules/' + m + '/static'));
}catch(e){
dbug('use static['+m+'] try node_modules,because of',e);
rout.use('/static',
express.static(process.env.PWD + '/modules/' + m + '/static'));
}