Created
October 16, 2017 21:27
-
-
Save juampi92/d91fc964be47a0788b7f266059cd7e20 to your computer and use it in GitHub Desktop.
Express Controllers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import joi from 'joi' | |
import validate from 'express-validation' | |
import middleware from 'middleware' | |
import AuthService from 'auth.service' | |
/** | |
* Controller's generic middleware | |
*/ | |
export const middleware = [middleware.authenticate('token')] | |
/** | |
* POST auth/login endpoint | |
* | |
* @export | |
* @param {any} req | |
* @param {any} res | |
*/ | |
login.middleware = [middleware.guest('token'), validate({ | |
body: { | |
type: joi.string().required(), | |
token: joi.string().required() | |
} | |
})] | |
export async function login(req, res, next) { | |
const service = new AuthService(req) | |
try { | |
await service.login() | |
} catch(e) { | |
return next(e) | |
} | |
res.status(200).send({ | |
data: { | |
token: service.getUserToken().token, | |
profile: service.getUser() | |
} | |
}) | |
} | |
login.posmiddleware = [] | |
/** | |
* | |
* | |
* @export | |
* @param {any} req | |
* @param {any} res | |
*/ | |
logout.middleware = [middleware.authenticated('token')] | |
export async function logout(req, res, next) { | |
const service = new AuthService(req, next) | |
await service.logout() | |
res.status(200).send({ | |
data: 'success' | |
}) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requireDirectory from 'require-directory' | |
import { | |
namespace, | |
slashNotation | |
} from '../core/utils' | |
/** | |
* Formats every controller inside the directory 'controllers' into an object. | |
* folder: | |
* - app | |
* - auth.controller | |
* | |
* output: | |
* { | |
* App: { | |
* AuthController: (file exports) | |
* } | |
* } | |
*/ | |
export const controllers = requireDirectory(module, './', { | |
rename: namespace | |
}) | |
/** | |
* Transform slash notation to the controller's method, appending/prepending any middleware required | |
* | |
* @export | |
* @param {any} ctrllr | |
* @returns | |
*/ | |
export default function (ctrllr) { | |
const [controllerName, methodName] = ctrllr.split('@') | |
const controller = slashNotation(controllerName, controllers) | |
const method = controller[methodName] | |
const { middleware:ctrlrmiddleware = [] } = controller | |
const { | |
middleware = [], posmiddleware = [] | |
} = method | |
return [...ctrlrmiddleware, ...middleware, method, ...posmiddleware] | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export function namespace(name) { | |
return name.replace(/(\b|\.)\w/g, l => l.toUpperCase()).replace('.', '') | |
} | |
export function slashNotation(string, object) { | |
return string.split('/').reduce((o, i) => o[i], object) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { | |
Router | |
} from 'express'; | |
import Ctrlrs from '../controllers' | |
const routes = Router(); | |
routes.post('/auth/login', Ctrlrs('App/AuthController@login')) | |
routes.post('/auth/logout', Ctrlrs('App/AuthController@logout')) | |
export default routes; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment