【问题标题】:Override native nodejs function with nodejs javascript or c++ addon使用 nodejs javascript 或 c++ 插件覆盖本机 nodejs 函数
【发布时间】:2015-12-14 06:54:29
【问题描述】:

我正在尝试覆盖 nodejs 的本机功能并将其设为全局。 (例如:控制台/要求)

这是我的方法:


M1使用全局

myConsole.js

function myConsole() {
  var nativeConsole = console;

  // ... some code


}

myConsole.log = function() {
  nativeConsole.log('It works!');
}

global.console = myConsole; // <-- HERE

index.js

require('./myConsole.js');
require('./test.js');

test.js

console.log('Not working. :(');

这失败了。


M2直接分配

myConsole.js

function myConsole() {
  var nativeConsole = console;

  // ... some code


}

myConsole.log = function() {
  nativeConsole.log('It works!');
}

*console = myConsole; // <-- HERE

index.js

require('./myConsole.js');
require('./test.js');

test.js

console.log('Not working. :(');

这也失败了。


有谁知道如何覆盖它?谢谢。

补充:我没有c++节点模块的经验,是否可以覆盖原生代码?

v8 reference

【问题讨论】:

    标签: c++ node.js node.js-addon


    【解决方案1】:

    在您的示例中,log 函数无法访问 nativeConsole 变量。这需要改变。我也没有看到全局分配global.console = myConsole;有什么问题

    您可以试试这个(这使您可以访问自定义函数中的nativeConsole 变量):

    function myConsole() {
      var nativeConsole = console;
    
      // ... some code
    
      return { 
          log : function() {
              nativeConsole.log('something');
          }
      }
    
    }
    
    global.console = myConsole;
    

    【讨论】:

    • 这种方式不错,但并不完全正确。它每次都需要调用 require('./myConsole.js')。我目前正在使用这种方式来处理我的脚本。但我真的希望是否有任何方法可以覆盖它;)。
    • @goodseller 我忘了添加更改全局对象的部分,这就是您在示例中所做的。请参阅编辑过的分析器。 global.console = myConsole;
    • 它显示消息:不工作。 :( 因为我替换了 myConsole.js 中的脚本
    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 2022-10-05
    • 2019-07-03
    • 1970-01-01
    • 2011-07-19
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多