我想拦截每个渲染的调用,做我自己的东西,然后继续使用原始的渲染方法。我知道这可以通过这样的中间件轻松完成:
function (req, res, next) {
var _render = render;
res.render = function () {
// custom stuff
_render.apply(this, arguments);
}
next();
}
然而,仅更改响应对象的原型而不是在每个请求上替换res.render似乎更有效。我试过such a solution没有成功。记录http.ServerResponse.prototype
时,没有任何渲染方法的痕迹。
最后我试图直接拦截app.render,就像这样:
var _render = app.render;
app.render = function () {
// this is refering to app instead of res...
_render.apply(this, arguments);
}
这确实符合我只做一次的标准,但是它在app对象上调用而不是res对象,这意味着我无法访问res或req对象。
基本上我认为我想做的是:
var _render = something.response.render;
something.response.render = function (view, data, callback) {
// Access res.*, as this.*
_render.call(this, view, data, callback);
};
任何想法如何实现?
答案 0 :(得分:3)
我猜这取决于Express版本。试试3.x:
var response = require( "express" ).response;
var _render = response.render;
response.render = function( ) {
// do your stuff
_render.apply( this, arguments );
};