Last active
April 15, 2016 21:17
-
-
Save FredLackeyOfficial/43064c3497fc94b2766f3bdc4aa2abe9 to your computer and use it in GitHub Desktop.
Exploring Express use order
This file contains 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
var express = require('express'), | |
router = express.Router(); | |
router.use(init); | |
function init (req, res, next) { | |
req.appData = req.appData = {}; | |
next(); | |
} | |
// SESSION routes setup the sessionInfo for subsequent routes | |
var sessionRoutes = require('./session.routes'); | |
router.use('/sessions', sessionRoutes); | |
// MEMBER routes rely on the data loaded by the SESSION routes. | |
var memberRoutes = require('./member.routes'); | |
router.use('/members', memberRoutes); | |
// MESSAGES routes should only be loaded or executed if MEMBER has not stopped them! | |
var messagesRoutes = require('./message.routes'); | |
router.use('/messages', messagesRoutes); | |
module.exports = router; |
This file contains 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
var _ = require('lodash'), | |
express = require('express'), | |
models = require('../data/models'), | |
router = express.Router(); | |
router.use(init); | |
router.param('id', loadMember); | |
router.get('/:id', sendMember); | |
function init (req, res, next) { | |
models.Member.findById(req.sessionInfo.memberId, function(err, member){ | |
if (err) { return next(err); } | |
req.sessionInfo.member = member; | |
next(); | |
}); | |
} | |
function loadMember (req, res, next, id) { | |
if (req.sessionInfo.memberId === id) { | |
req.appData.member = req.sessionInfo.member; | |
return next(); | |
} | |
models.Member.findById(id, function(err, member){ | |
if (err) { return next(err); } | |
req.appData.member = member; | |
next(); | |
}); | |
} | |
function sendMember (req, res, next) { | |
var info = _.omit(req.appData.member, ['salt', 'hash']) || {}; | |
res.send(info); | |
} | |
module.exports = router; |
This file contains 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
var _ = require('lodash'), | |
express = require('express'), | |
models = require('../data/models'), | |
router = express.Router(); | |
router.use(init); | |
router.param('id', loadMessage); | |
router.get('/', sendMessageList); | |
router.get('/:id', sendMessage); | |
function init (req, res, next) { | |
models.Message.findUnreadMessages(req.sessionInfo.memberId, function(err, unreadMsgs){ | |
if (err) { return next(err); } | |
req.appData.messages = req.appData.messages || {}; | |
req.appData.messages.undread = unreadMsgs; | |
next(); | |
}); | |
} | |
function loadMessage (req, res, next, id) { | |
req.appData.message = _.find(req.appData.messages.unread, function(msg){ | |
return (msg.id == id); | |
}); | |
if (req.appData.message) { return next(); } | |
models.Message.findById(id, function(err, message){ | |
if (err) { return next(err); } | |
req.appData.message = message; | |
next(); | |
}); | |
} | |
function sendMessage (req, res, next) { | |
var info = _.omit(req.appData.member, ['audit']) || {}; | |
res.send(info); | |
} | |
module.exports = router; |
This file contains 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
var express = require('express'), | |
router = express.Router(); | |
router.use(init); | |
router.use(validateSession); | |
function init (req, res, next) { | |
req.sessionInfo = req.sessionInfo || {}; | |
// Decode req.headers.authorization into req.sessionInfo | |
// Member ID is now stored in: req.sessionInfo.memberId | |
next(); | |
} | |
function validateSession (req, res, next) { | |
var now = new Date(); | |
if (req.sessionInfo.expiryDate <= now) { return next('Session has expired'); } | |
next(); | |
} | |
module.exports = router; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment