私はConnect/Express.jsでNode.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の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' });
});
動作するようです。私が各リクエストのための新しいレスポンスラッパーオブジェクトを作成している最中の解決策であるかどうかは分かりませんが、それは問題でしょうか?
を、通常、あなたがそれを行う方法であること。ルータの前で使用されているミドルウェアに入れておけば、1か所に設定することができます。 –
私はミドルウェアを使うことを考えました。私がアプリケーション全体の応答の振る舞いをオーバーライドしたいのかどうかはわかりません。私のフレームワークを通してルーティングされるリクエストについてのみです。 –