在Node.js上的Express中扩展View类

时间:2012-11-14 13:16:43

标签: node.js express monkeypatching

我想覆盖Node.js中使用的Express框架中的View类。我想增加查找方法,但是如果不改变Express和App模块,我就看不到这样做的方法。我倾向于从Express框架中获取,但我无法找到一种巧妙的方法来做到这一点。

有什么想法吗?

由于

2 个答案:

答案 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