M.K*_*afi 20 javascript oop node.js express
对于每个中间件,Express传递一个res和一个req对象.这些对象分别扩展了来自http.ServerResponse和来自的本地对象http.ClientRequest.我想知道是否可以覆盖或扩展响应对象的方法.
例如,而不是res.render('home', jsonData);,我想延长res一个名为customRender一个自定义的方法,并使用它像这样:res.customRender().
我没有陷入某个特定问题或其他任何问题.我只是想学习如何扩展本机对象,或者像本例一样,来自Node.js中第三方模块的对象
fre*_*ish 32
最好的想法是将自定义方法添加到响应对象的原型:
var express = require("express");
express.response.customRender = function() {
// your stuff goes here
};
Run Code Online (Sandbox Code Playgroud)
并且每个res对象都应该可以访问此函数.
您可以阅读源代码以了解它们如何扩展本机对象.基本上他们正在做原型链接:
快递/ lib目录/ response.js
var res = module.exports = {
__proto__: http.ServerResponse.prototype
};
Run Code Online (Sandbox Code Playgroud)
这个对象成为newely创建的响应对象(来自连接框架)的原型:
res.__proto__ = app.response;
Run Code Online (Sandbox Code Playgroud)
(app.response只是res上面定义的别名).请注意,__proto__property是对对象原型的引用.
但请注意.首先,__proto__它不是EcmaScript的一部分(它可能在其他JavaScript实现中不可用).其次:通常你会做继承Object.create(__proto__直接设置一个对象是一个猴子修补,这通常是一个不好的做法,它可能会打破很多东西).在这里阅读更多相关信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain
只需添加一个中间件,将customRender函数添加到res.
function(req, res, next) {
res.customRender = function() {
// implement your custom renderer
}
next();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10085 次 |
| 最近记录: |