Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何记录节点应用程序的操作顺序?_Node.js - Fatal编程技术网

Node.js 如何记录节点应用程序的操作顺序?

Node.js 如何记录节点应用程序的操作顺序?,node.js,Node.js,我正在寻找一种方法来记录我的节点应用程序的操作顺序。类似于堆栈跟踪,但为调试方法链和错误而定制。这样做的目的是避免向每个函数添加代码,或者显式地侦听每个函数。在ruby中有一种方法可以做到这一点,但在node中我没有看到任何干净的方法可以做到这一点 我一直在寻找一种方法,在每次调用函数时,都可以访问低级节点事件(或添加一个侦听器),并记录传递给它的函数名和参数。节点中是否存在类似的内容?或者现有的工具是否可以做类似的事情 例如,不必在每个函数中添加代码 var bar, baz, foo; b

我正在寻找一种方法来记录我的节点应用程序的操作顺序。类似于堆栈跟踪,但为调试方法链和错误而定制。这样做的目的是避免向每个函数添加代码,或者显式地侦听每个函数。在ruby中有一种方法可以做到这一点,但在node中我没有看到任何干净的方法可以做到这一点

我一直在寻找一种方法,在每次调用函数时,都可以访问低级节点事件(或添加一个侦听器),并记录传递给它的函数名和参数。节点中是否存在类似的内容?或者现有的工具是否可以做类似的事情

例如,不必在每个函数中添加代码

var bar, baz, foo;

baz = function(b) {
  return b * 2;
};

bar = function(a, b, c) {
  return baz(a, b, c);
};

foo = function() {
  return bar(1, 2, 3);
};

foo();

// calling foo() would log...
// foo called, returns from bar
// bar called with 1, 2, 3, returns from baz
// baz called with 2, returns 4

这在javascript中是不可能的,但是代码可以帮助您。在javascript中,您可以像这样将一个函数包装在另一个函数周围,这可能有助于调试,而不是复制每个函数中的代码

const logFunction = function(f) {
    return function() {
        console.log('Calling Function');
        const x = f.apply(null, arguments);
        console.log('Function Returns', x);
        return x;
    }    
}

const x  = logFunction(function (name) {
    console.log('Hello', name);
    return name;
});

const sum  = logFunction(function (a, b) {
    return a + b;
});

x('World');
sum(2, 3);

结果:

Calling Function
Hello World
Function Returns World
Calling Function
Function Returns 5

Node是一个单线程应用程序,所以您需要在每个函数中添加代码。我自己也在尝试解决这个问题,但使用代理也不可能做到这一点吗?据我所知,jshmm中没有这样的方法。。。我开始研究某种本质上可以做类似事情的后处理,但我想知道调试错误跟踪会有多困难。我也发现了这一点,这对这个场景没有帮助,但仍然很有趣