2012-05-12 16 views
2

nodejsのルーティングフレームワークを作成しようとしていますが、ServerRequestとServerResponseのヘルパーメソッドをいくつか追加する必要があります。私はちょうどやりたい、/ middlewares.js プロトタイプを変更すると悪影響はありますか?

expressInit = function(req, res, next) { 
    // ... 
    res.__proto__ = app.response; 
    next() 
} 

しかし、私の枠組みの中で

/それを

表現するために、プロトタイプを変更するから仕方を変え表現しているに気づく

var res = module.exports = { 
    __proto__: http.ServerResponse.prototype 
}; 

res.redirect = function (url) { 
    ... 
} 

をresponse.js、エクスプレスそれは簡単です:

http.ServerResponse.prototype.redirect = function(url) { 
    ... 
} 

なぜ私は知らない何かがわからない私はなぜ表現を変更するスタイルo fオーバーライド。

答えて

0

__proto__ pseudo-attribute is non-standardですので、これは本当に適切ではありません。また、Mozilla Developer Network(MDN)によれば、現在は非推奨となっています。

ただし、prototype property of Functionsは言語の標準部分であり、その使用は常に安全です。

常にMyFunction.prototypeを使用し、myObject.__proto__を使用しないでください。

0

Expressを使用すると、ServerResponseのインスタンスの応答オブジェクトのみが変更されます。あなたのメソッドは、ノードプロセスの任意のサーバーによって作成されたすべての応答に、リダイレクト機能をグローバルに追加します。

ノードプロセス内で複数のフレームワークとサーバーを実行していた場合や、他のユーザーとコードを共有したい場合は、別のフレームワークでリダイレクト機能が追加される可能性があります衝突。一般に、あなたが所有していないオブジェクトを変更することは、悪いスタイルとみなされます。

エクスプレスウェイにはperformance penaltyが付いていますが、それ以外の方法ではパフォーマンスが低下する可能性があります。

関連する問題