我是node.js编程的新手。我需要在现有的node.js应用程序(Haraka SMTP服务器)中更改一个函数的行为。
这样做的最佳做法是什么?我应该使用插件还是有另一种方法如何在node.js应用程序中重载一个特定的JS函数?这甚至可能吗?
答案 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
};
这是一个糟糕的例子,您应该永远不会以这种方式更改核心库。你不能预见所有的副作用。
但是,如果您知道自己做了什么,就可以采用现有的库而无需在内部更改它们。这是一种非常灵活的装饰功能的方法。