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