blog
blog copied to clipboard
node try catch 内如果嵌套了require,会阻止require的文件的错误栈显示
今天在调试的时候遇到的一个比较蛋疼的问题,描述如下:
我在index.js
中引入了一个文件,是以一种比较奇葩的方式引入的:
for(let i = 0; i<scanner.length;i++){
try {
//在这里require的,外层有个try
let valiInstance = require(path.join(projectPath + filePath + scanner[i]));
privateDec[subStr(valiInstance.id)] = valiInstance;
} catch (e) {
throw new Error(e);
}
}
然后莫名其妙的就报错了:
然后我就开始慌了
/手动滑稽
,通过错误栈可以看出来明显是多了或者少了个大括号{
,但是特么的,这个报错行数显示的是new Error(e)
的行数,/黑人问号脸
,这个时候就有问题了,难道错误栈没带出来吗?经过排查,果然是这样……比如我这样操作一下:
for(let i = 0; i<scanner.length;i++){
//try {
let valiInstance = require(path.join(projectPath + filePath + scanner[i]));
privateDec[subStr(valiInstance.id)] = valiInstance;
//} catch (e) {
// throw new Error(e);
//}
}
注释掉try catch
,后面的真凶就毕露了:
是我require里面的文件报错了。
不过这种奇葩错误应该不是很多见,因为不会有人
try catch
中套着require
。我也是在本地开发调试的时候偶然发现的。。。囧