我想拦截每个渲染调用,做我自己的事情,然后继续使用原始渲染方法。我知道这可以通过这样的中间件轻松完成:
function (req, res, next) {
var _render = render;
res.render = function () {
// custom stuff
_render.apply(this, arguments);
}
next();
}
但是,仅更改响应对象的原型而不是在每个请求上替换 res.render 似乎更有效。我尝试了这样的解决方案,但没有成功。记录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);
};
任何想法如何实现这一目标?