I'm learning express.js / node.js and have a good but not excellent understanding of the javascript prototype model. Hence, I'm a bit confused on the way middleware can be stacked in express.js's routing mechanisms.
Say we have this code
function andRestrictTo(role) {
return function(req, res, next) {
req.authenticatedUser.role == role
? next() : next(new Error('Unauthorized'));
}
}
app.del('/user/:id', loadUser, andRestrictTo('admin'), function(req, res){
res.send('Deleted user ' + req.user.name);
});
Since andRestrictTo(role) returns a middleware, it get's executed in the routing chain - I got that. However:
Where does the req, res, next parameters come from in the returned function? I guess that the "chain" is somehow queuing it and assings the parameters, but this is a bit too vague for a deeper understanding ...
What is happening with the Error that is raised as next's parameter? Does an error simply break the middleware chain?
If I would want to package the restriction mechanism to a separate file / module (like a security framework), how would that be done?
It would be cool if someone could point out the basic idea :)