Skip to content

Instantly share code, notes, and snippets.

@FredLackeyOfficial
Last active April 15, 2016 21:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FredLackeyOfficial/43064c3497fc94b2766f3bdc4aa2abe9 to your computer and use it in GitHub Desktop.
Save FredLackeyOfficial/43064c3497fc94b2766f3bdc4aa2abe9 to your computer and use it in GitHub Desktop.
Exploring Express use order
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;
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;
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;
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