@abbott-platform/abbott-framework
Version:
Abbott Framework is a framework to bring productivity and abstractions to help you to build awesome chatbots.
126 lines (103 loc) • 3.42 kB
JavaScript
var path = require('path');
var fs = require('fs');
var express = require('express');
var bodyParser = require('body-parser');
var querystring = require('querystring');
const logging = require('../logging');
const { webserverRouteLoader } = require('../loaders');
module.exports = class {
get logger() {
if (!this.__logger) {
this.__logger = logging(`abbott-framework:webserver`);
}
return this.__logger;
}
constructor(options) {
this.options = options || {};
this.options.baseRoutes = this.options.baseRoutes || [];
this.server = express();
this.server.use(bodyParser.json());
this.server.use(bodyParser.urlencoded({ extended: true }));
this.serverRoutes = {};
this.loadInitialRoutes();
}
loadInitialRoutes() {
this.loadRoute(path.join(__dirname, 'routes'));
if (this.options.baseRoutes.length > 0) {
this.options.baseRoutes.forEach((item) => {
this.loadRoute(item);
});
}
}
loadRoute(routeOpts) {
let baseRouteDir = null;
let baseRoutePath = null;
if (typeof routeOpts === 'string' || routeOpts instanceof String) {
baseRouteDir = routeOpts;
} else {
baseRouteDir = routeOpts.baseDir || null;
baseRoutePath = routeOpts.routePath || null;
}
if (!this.serverRoutes[baseRouteDir]) {
this.serverRoutes[baseRouteDir] = webserverRouteLoader(this, baseRouteDir, baseRoutePath);
}
}
start() {
return new Promise((resolve, reject) => {
this.serverListener = this.server.listen(process.env.express_port || 3000, () => {
this.logger.debug('Webserver configured and listening at http://localhost:' + process.env.express_port || 3000);
resolve();
});
});
}
stop() {
return new Promise((resolve, reject) => {
try {
this.logger.debug('Closing webserver...');
this.serverListener.close(() => {
this.logger.debug('Webserver closed!');
resolve();
});
} catch(ex) {
reject(ex);
}
});
}
};
/*
module.exports = function (options) {
var logger = logging(`abbott-framework:webserver`);
options = options || {};
var webserver = express();
webserver.use(bodyParser.json());
webserver.use(bodyParser.urlencoded({ extended: true }));
var webserverRoutes = webserverRouteLoader(webserver, path.join(__dirname, 'routes'));
// var bot_assets_dir = path.join(process.cwd(), 'bot');
// var mimeImage = {
// gif: 'image/gif',
// jpg: 'image/jpeg',
// png: 'image/png',
// svg: 'image/svg+xml'
// };
// webserver.get('/bot/avatar', (req, res) => {
// var file = path.join(bot_assets_dir, 'avatar.png');
// if (file.indexOf(bot_assets_dir + path.sep) !== 0) {
// return res.status(403).end('Forbidden');
// }
// var type = mimeImage[path.extname(file).slice(1)] || 'text/plain';
// var s = fs.createReadStream(file);
// s.on('open', function () {
// res.set('Content-Type', type);
// s.pipe(res);
// });
// s.on('error', function () {
// res.set('Content-Type', 'text/plain');
// res.status(404).end('Not found');
// });
// });
webserver.listen(process.env.express_port || 3000, null, function () {
logger.debug('Express webserver configured and listening at http://localhost:' + process.env.express_port || 3000);
});
return webserver;
};
*/