如何确定执行哪个文件函数?
我希望能够检入log.js文件,其中执行了print_info(file1或file2)函数。
我已经尝试过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);
回答如下:
这是一种不好的做法,如果你需要识别调用者,调用函数应该将标识符传递给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项将引用新的Error()行,第2项将引用其父项,第3项应该是parent.parent。
或者,如果你只是打印整个堆栈跟踪,你可以做qazxsw poi。