Old question, but found myself asking the same thing. How to intercept res render?
Using express 4.0x something now.
You can use/write middleware. The concept was a bit daunting to me at first, but after some reading it made a little more sense. And just for some context for anyone else reading this, the motivation for overriding res.render was to provide global view variables. I want session
to be available in all my templates without me having to type it in every res object.
The basic middleware format is.
app.use( function( req, res, next ) {
//....
next();
} );
The next param and function call are crucial to execution. next
is the callback function, to allow multiple middleware to do their thing without blocking. For a better explanation read here
This can then be used to override render logic
app.use( function( req, res, next ) {
// grab reference of render
var _render = res.render;
// override logic
res.render = function( view, options, fn ) {
// do some custom logic
_.extend( options, {session: true} );
// continue with original render
_render.call( this, view, options, fn );
}
next();
} );
I’ve tested this code, using express 3.0.6. It should work with 4.x without issue.
You can also override specific URLs combos with
app.use( '/myspcificurl', function( req, res, next ) {...} );