javascriptnode.js

Nodejs: get filename of caller function


I wonder how-to get an absolute path of a caller of a function?

Let say that:

in file a.js I call b(); b() is a function defined in file b.js. a.jsrequires b . So how do I get a.js absolute path from b.js in node?


Solution

  • This is an example how to use stacktrace to find caller file in node

    function _getCallerFile() {
        var filename;
    
        var _pst = Error.prepareStackTrace
        Error.prepareStackTrace = function (err, stack) { return stack; };
        try {
            var err = new Error();
            var callerfile;
            var currentfile;
    
            currentfile = err.stack.shift().getFileName();
    
            while (err.stack.length) {
                callerfile = err.stack.shift().getFileName();
    
                if(currentfile !== callerfile) {
                    filename = callerfile;
                    break;
                }
            }
        } catch (err) {}
        Error.prepareStackTrace = _pst;
    
        return filename;
    }