对于每个中间件,Express都传递一个res和一个req对象。这些对象扩展了分别来自http.ServerResponse和的本地对象http.ClientRequest。我想知道是否有可能覆盖或扩展响应对象的方法。
res
req
http.ServerResponse
http.ClientRequest
例如,而不是res.render('home', jsonData);,我想延长res一个名为customRender一个自定义的方法,并使用它像这样:res.customRender()。
res.render('home', jsonData);
res.customRender()
我没有遇到任何特定问题或其他任何问题。我只是想学习如何扩展本机对象,或者像本例一样,扩展来自Node.js中第三者模块的对象
最好的主意是在响应对象的原型中添加一个自定义方法:
var express = require("express"); express.response.customRender = function() { // your stuff goes here };
每个res对象都应该可以访问此功能。
您可以阅读源代码,以了解它们如何扩展本机对象。基本上他们在做原型链:
express / lib / response.js
var res = module.exports = { __proto__: http.ServerResponse.prototype };
这个对象成为新创建的响应对象(来自connect框架)的原型:
res.__proto__ = app.response;
(app.response只是res上面定义的别名)。请注意,__proto__属性是对对象原型的引用。
app.response
__proto__
但是被警告。首先,__proto__它不是EcmaScript的一部分(在其他JavaScript实现中可能不可用)。其次:通常,您将使用继承Object.create(__proto__直接在对象上设置是猴子修补,通常是不好的做法,它可能会破坏很多东西)。在此处阅读有关此内容的更多信息:
Object.create
https://developer.mozilla.org/zh- CN/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain