我想覆盖Node.js中使用的Express框架中的View类。我想增加查找方法,但是如果不改变Express和App模块,我就看不到这样做的方法。我倾向于从Express框架中获取,但我无法找到一种巧妙的方法来做到这一点。
有什么想法吗?
由于
答案 0 :(得分:2)
在我看来,你应该能够:
var View = require('express/lib/view');
// Keep reference to original lookup method
var _lookup = View.prototype.lookup;
// Override lookup method
View.prototype.lookup = function (path) {
// Your implementation here
};
<强>更新强>
将此作为演示运行:
var View = require('express/lib/view');
var _lookup = View.prototype.lookup;
var express = require('express');
View.prototype.lookup = function (path) {
console.log('LOOKUP!!! ' + path);
return _lookup.call(this, path);
};
var app = express();
app.get('/', function (req, res) {
res.render('foo.jade');
});
app.listen(3000);
运行
node app & sleep 1 && curl localhost:3000
我希望这能证明这种覆盖方法的可行性。
答案 1 :(得分:1)
这取决于您使用的Express版本。
只有当您的应用使用版本3之前的Express
时,才能轻松扩充视图查找代码因为Express 3.0不再可行了。
您可以查看我的旧相关答案中的示例代码: Multiple View paths on Node.js + Express