qwebs
Version:
Back-end web server
71 lines (51 loc) • 2.2 kB
JavaScript
/*!
* qwebs
* Copyright(c) 2016 Benoît Claveau
* MIT Licensed
*/
;
var fs = require("fs"),
path = require("path"),
DataError = require("./../dataerror"),
Q = require("q");
function QwebsLoader (){
};
QwebsLoader.prototype.constructor = QwebsLoader;
QwebsLoader.prototype.load = function($qwebs) {
if (!$qwebs) throw new DataError({ message: "Qwebs instance is not defined." });
var $config = $qwebs.resolve("$config");
return Q.try(function() {
var filepath = $config.routes;
if (!filepath) return {};
if (typeof filepath == "string")
{
try {
filepath = path.resolve($qwebs.root, filepath);
return Q.ninvoke(fs, "readFile", filepath).then(function(str) {
return JSON.parse(str);
});
}
catch(error) {
throw new DataError({ message: "Failed to read the bundle file: " + filepath + ". " + error.message });
}
}
else if (filepath instanceof Object) return filepath;
else throw new DataError({ message: "Qwebs type is not managed." });
}).then(function(routes) { //inject services
routes.services = routes.services || [];
routes.services.forEach(function(service) {
$qwebs.inject(service.name, service.location, service.options);
});
return routes;
}).then(function(routes) { //load locators
routes.locators = routes.locators || [];
routes.locators.forEach(function(locator) {
if (locator.get) $qwebs.get(locator.get, locator.service, locator.method);
else if (locator.post) $qwebs.get(locator.post, locator.service, locator.method);
else if (locator.put) $qwebs.get(locator.put, locator.service, locator.method);
else if (locator.delete) $qwebs.get(locator.delete, locator.service, locator.method);
});
return routes;
})
};
exports = module.exports = new QwebsLoader();