Skip to content

Commit

Permalink
revert merge from error_management
Browse files Browse the repository at this point in the history
  • Loading branch information
oded leiba committed Aug 2, 2016
1 parent ca93ac3 commit 82efce0
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 105 deletions.
122 changes: 23 additions & 99 deletions lib/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@

var express = require('express')
var merge = require('merge')
var clone = require('clone')
var jf = require('jsonfile')
var fs = require('fs')
var path = require('path')

function build_rest_path (path, params) {
if (params) {
Expand Down Expand Up @@ -47,47 +43,40 @@ function parse_error_msg (err) {

function get_params_from_request (request, params_template, mandatory, callback) {
var params = {}
var errors
params_template = params_template || []
for (var index = 0; index < params_template.length; index++) {
var param_name = params_template[index]
var param
if (request.check) {
if (mandatory) request.assert(param_name, 'Missing param: ' + param_name).notEmpty()
var errors = request.validationErrors()
if (errors) {
if (!Array.isArray(errors)) errors = [errors]
var msgs = errors.map(function (err) {
return parse_error_msg(err)
})
var msg = msgs.join('\n')
// console.error(msg)
var err = {
message: msg,
status: 400
}
return callback(err)
}
param = extract_param(request, param_name)
errors = request.validationErrors()
} else {
param = extract_param(request, param_name)
}
if (!(typeof param === 'undefined')) params[param_name] = param
}

if (request.check) {
errors = request.validationErrors()
if (errors) {
if (!Array.isArray(errors)) errors = [errors]
var explanations = errors.map(function (err) {
return parse_error_msg(err)
})
var explanation = explanations.join('\n')
console.error(explanation)
var err = {
message: 'Validation error',
explanation: explanation,
status: 400
}
return callback(err)
}
}

callback(null, params)
}

function build_function_call (controllers_path, path_element) {
var function_name_array = path_element.function_name.split('.')
var version = function_name_array[0]
var file_name = function_name_array[1]
var cFile = path.join(controllers_path, version, file_name + '.js')
var cFunction = function_name_array[2]
var cFile = controllers_path + function_name_array[0] + '.js'
var cFunction = function_name_array[1]
return function (request, response, next) {
return require(cFile)[cFunction](request, response, next)
}
Expand All @@ -110,7 +99,7 @@ function build_request_params (path_element) {
}
}

function connect_paths (router, version, method, controllers_path, auth, routes, private_area, custom_middlewares) {
function connect_paths (router, method, controllers_path, auth, routes, private_area, custom_middlewares) {
for (var path in routes) {
var middlewares = []
var path_element = routes[path]
Expand All @@ -137,85 +126,20 @@ function connect_paths (router, version, method, controllers_path, auth, routes,

var handler = build_function_call(controllers_path, path_element)
middlewares.push(handler)

path = '/' + version + path
rest_path = '/' + version + rest_path
router[method](path, middlewares)
router[method](rest_path, middlewares)
}
}

var build_routes = function (routes_path) {
var routes = {}
var GET_public = {}
var GET_private = {}
var POST_public = {}
var POST_private = {}
var PUT_public = {}
var PUT_private = {}
var DELETE_public = {}
var DELETE_private = {}

var version_folders = fs.readdirSync(routes_path)
version_folders.forEach(function (folder) {
var folder_path = path.join(routes_path, folder)
if (!fs.lstatSync(folder_path).isDirectory() || folder[0] !== 'v' || isNaN(folder.substring(1, folder.length))) {
throw new Error('routes path must contain only folders of the format "v"<number>')
}
})
version_folders.sort(function (folder1, folder2) {
return parseInt(folder1.substring(1, folder1.length), 10) - parseInt(folder2.substring(1, folder2.length), 10)
}).forEach(function (version) {
var merge = merge_route(version, routes_path)
merge(GET_public, 'GET-public.json')
merge(GET_private, 'GET-private.json')
merge(POST_public, 'POST-public.json')
merge(POST_private, 'POST-private.json')
merge(PUT_public, 'PUT-public.json')
merge(PUT_private, 'PUT-private.json')
merge(DELETE_public, 'DELETE-public.json')
merge(DELETE_private, 'DELETE-private.json')

routes[version] = {
// Routing settings
GET: { Public: clone(GET_public), Private: clone(GET_private) },
POST: { Public: clone(POST_public), Private: clone(POST_private) },
PUT: { Public: clone(PUT_public), Private: clone(PUT_private) },
DELETE: { Public: clone(DELETE_public), Private: clone(DELETE_private) }
}
})

return routes
}

var merge_route = function (version, routes_path) {
var versioned_routes_path = path.join(routes_path, version)
return function (route, file_name) {
var route_path = path.join(versioned_routes_path, file_name)
try {
var json = jf.readFileSync(route_path)
Object.keys(json).forEach(function (path) {
json[path].function_name = version + '.' + json[path].function_name
})
merge(route, json)
} catch (e) {
// file does not exist - do nothing
}
}
}

module.exports = function (routes_path, controllers_path, auth, router, custom_middlewares) {
var routes = build_routes(routes_path)
module.exports = function (routes, controllers_path, auth, router, custom_middlewares) {
router = router || express.Router()
for (var version in routes) {
for (var method in routes[version]) {
connect_paths(router, version, method.toLowerCase(), controllers_path, auth, routes[version][method].Public, false, custom_middlewares)
connect_paths(router, version, method.toLowerCase(), controllers_path, auth, routes[version][method].Private, true, custom_middlewares)
}
for (var method in routes) {
connect_paths(router, method.toLowerCase(), controllers_path, auth, routes[method].Public, false, custom_middlewares)
connect_paths(router, method.toLowerCase(), controllers_path, auth, routes[method].Private, true, custom_middlewares)
}
console.log('----------------------------------------------------------------------------------')
console.log('------------------------------- Created Routes -------------------------------')
console.log('----------------------------------------------------------------------------------')

return router
}
}
12 changes: 6 additions & 6 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ module.exports = function (properties) {
var proxy_strict = properties.server.proxy_strict
var key_file = properties.ssl && properties.ssl.key
var crt_file = properties.ssl && properties.ssl.crt
var redis_host = properties.redis && properties.redis.host
var redis_port = properties.redis && properties.redis.port
var redis_host = properties.redis && properties.redis.host || '127.0.0.1'
var redis_port = properties.redis && properties.redis.port || 6379
var redis_user = properties.redis && properties.redis.user
var redis_password = properties.redis && properties.redis.password
var redis_options = properties.redis && properties.redis.options
Expand All @@ -49,7 +49,7 @@ module.exports = function (properties) {
var static_folder = properties.engine && properties.engine.static_folder
var admin_users = properties.basic && properties.basic.admin_users
var realm = properties.basic && properties.basic.realm
var validator = properties.modules && properties.modules.validator
var validator = { customValidators: properties.modules && properties.modules.validator }
var router = properties.modules && properties.modules.router
var error = properties.modules && properties.modules.error
var logger = properties.modules && properties.modules.logger
Expand Down Expand Up @@ -115,11 +115,11 @@ module.exports = function (properties) {
app.use(favicon(faviconDir)) // Fast fav icon middleware
app.use(cors()) // Allowing CORS comunication
app.use(bodyParser.json()) // Support for JSON-encoded bodies
app.use(bodyParser.urlencoded({ extended: true })) // Support for URL-encoded bodies
app.use(bodyParser.urlencoded({ extended: true })) // Support for URL-encoded bodies
app.engine(file_extantion, consolidate[engine_type]) // assign the template engine to the file extantion
app.set('view engine', file_extantion) // set file extantion as the default extension
app.set('views', views_folder) // Changing default view folder
app.use(validator || expressValidator()) // Parameter validation middleware
app.use(expressValidator(validator)) // Parameter validation middleware
router && app.use(router) // Load the router to the server
static_folder && app.use(express.static(static_folder)) // Optional HTTP static server middleware
logger && app.use(expressWinston.errorLogger({ // Adds optional express error logging to winston logger
Expand Down Expand Up @@ -253,4 +253,4 @@ module.exports = function (properties) {
}

return (server)
}
}

0 comments on commit 82efce0

Please sign in to comment.