如何确定在哪个文件中执行了函数?

时间:2019-02-15 08:27:56

标签: javascript node.js

我希望能够检入log.js文件中执行了file1或file2函数print_info的文件。

我已经尝试了module.parent.parent.filename,但是即使我正在运行file2,它也会返回file1的路径。

在节点上可以吗?

我有以下文件:

log.js

function print_info(data){
   console.log('Function was called in: ', module.parent.parent.filename) //here I'd like to know where function was executed
   console.log(data);
};

file1.js

var print_info = require('log.js');
print_info(my_data);

file2.js

var print_info = require('log.js');
print_info(my_data);

1 个答案:

答案 0 :(得分:3)

这是一个不好的做法,如果您需要识别调用者,则调用函数应将标识符传递给print_info

即在file1.js中,输入print_info('file1', my_data)

如果出于任何原因您坚持使用“父方法”,则可以使用stacktrace:

function print_info(data){
   console.log('Function was called in: ');
   var stack = new Error().stack.split('\n');
   console.log(stack);
   console.log(data);
};

您可以读取stack的值,第0项将是“ Error”,第1项将引用new Error()的行,第2项将指向其父项,第3项应是parent.parent

或者,如果您只需要打印整个堆栈跟踪记录,就可以执行console.trace(data)