在node.js中有时侯会想从被调用函数中获取调用者的文件位置和路径。可以用以下方法:
callsite模块
使用这个模块可以获取调用堆栈的文件目录
var path = require('path'),callsite = require('callsite');module.exports = {someFn: function () {var stack = callsite(),requester = stack[1].getFileName();console.log(path.dirname(requester));}};
当另外一个文件调用时someFn时,可以打出此文件的目前信息。
Error打印堆栈
其实callsite只有几行代码,基本原理是新建了一个Error,然后此err.stack就会保存所有的调用堆栈。
module.exports = function(){var orig = Error.prepareStackTrace;Error.prepareStackTrace = function(_, stack){ return stack; };var err = new Error;Error.captureStackTrace(err, arguments.callee);var stack = err.stack;Error.prepareStackTrace = orig;return stack;};
如果不想增加一个模块依赖,完全可以将这个方法写入函数中:
var getStack = function() {var orig = Error.prepareStackTrace;Error.prepareStackTrace = function(_, stack){ return stack; };var err = new Error;//Error.captureStackTrace(err, arguments.callee);var stack = err.stack;Error.prepareStackTrace = orig;return stack;};
调用:
var stack = getStack()console.log(stack)console.log(stack[0].getFileName())
Error.captureStackTrace是在error上重建Stack Tree,而实践中在新Error初始化时,stack就建立好了,所以这里可以看情况省略。
回复 (0)
微信扫码 立即评论
