【问题标题】:How to determine in which file function was executed?如何确定在哪个文件中执行了函数?
【发布时间】:2019-07-09 08:29:34
【问题描述】:

我希望能够在 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);

【问题讨论】:

标签: javascript node.js


【解决方案1】:

这是一个不好的做法,如果你需要识别调用者,调用函数应该传递一个标识符给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的值,item 0 会是“Error”,item 1 会引用 new Error() 的 line,item 2 指向它的 parent,item 3 应该是 parent.parent。

或者,如果您可以打印整个堆栈跟踪,您可以直接使用console.trace(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多