【发布时间】:2012-03-06 08:26:36
【问题描述】:
我正在使用 Connect/Express.js 构建一个 Node.js 应用程序,我想拦截 res.render(view, option) 函数以在将其转发到原始渲染函数之前运行一些代码。
app.get('/someUrl', function(req, res) {
res.render = function(view, options, callback) {
view = 'testViews/' + view;
res.prototype.render(view, options, callback);
};
res.render('index', { title: 'Hello world' });
});
这看起来像是一个人为的例子,但它确实适合我正在构建的整体框架。
我对 JavaScript 上的 OOP 和原型继承的了解有点薄弱。我该怎么做这样的事情?
更新:经过一些实验,我想出了以下内容:
app.get('/someUrl', function(req, res) {
var response = {};
response.prototype = res;
response.render = function(view, opts, fn, parent, sub){
view = 'testViews/' + view;
this.prototype.render(view, opts, fn, parent, sub);
};
response.render('index', { title: 'Hello world' });
});
它似乎工作。不确定这是否是最佳解决方案,因为我正在为每个请求创建一个新的响应包装对象,这会是一个问题吗?
【问题讨论】:
-
这就是你通常的做法。如果你把它放在路由器之前使用的中间件中,你可以在一个地方设置它。
-
我想到了使用中间件。不确定我是否要覆盖整个应用程序的响应行为,仅适用于通过我的框架路由的请求。
标签: javascript node.js express connect prototypal-inheritance