如何在外部node.js应用程序中重载函数?

时间:2013-04-24 13:49:51

标签: node.js overloading

我是node.js编程的新手。我需要在现有的node.js应用程序(Haraka SMTP服务器)中更改一个函数的行为。

这样做的最佳做法是什么?我应该使用插件还是有另一种方法如何在node.js应用程序中重载一个特定的JS函数?这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

节点的require缓存已加载的对象。因此,您可以覆盖对象的功能,执行某些操作,调用原始函数,然后执行某些操作。

var fs = require('fs');

var origRenameSync = fs.renameSync;
fs.renameSync = function(oldPath, newPath) {
    newPath += ".renamed";
    origRenameSync.call(this, oldPath, newPath);
    // do more here
};

这是一个糟糕的例子,您应该永远不会以这种方式更改核心库。你不能预见所有的副作用。

但是,如果您知道自己做了什么,就可以采用现有的库而无需在内部更改它们。这是一种非常灵活的装饰功能的方法。