Я создаю приложение Node.js с Connect/Express.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 немного слабы. Как мне сделать что-то подобное?
Обновление: После некоторых экспериментов я придумал следующее:
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' });
});
Кажется, что сработало. Не уверен, что это лучшее решение, поскольку я создаю новый объект оболочки ответа для каждого запроса, будет ли это проблемой?