处理node.js中的require()模块引发的错误

在试图require()模块不存在的时候,在我的代码中有一点障碍。 代码循环遍历目录,并在每个文件夹上执行var appname = require('path') 。 这适用于适当configuration的模块,但会引发: Error: Cannot find module循环遇到非Error: Cannot find moduleError: Cannot find module模块。

我希望能够优雅地处理这个错误,而不是让它停止我的整个过程。 所以简而言之,如何捕获由require()抛出的错误?

谢谢!

看起来像一个try / catch块在这个例子上做的伎俩

 try { // a path we KNOW is totally bogus and not a module require('./apps/npm-debug.log/app.js') } catch (e) { console.log('oh no big error') console.log(e) } 

如果给定的path不存在,require()会将其代码属性设置为“MODULE_NOT_FOUND”的错误。

https://nodejs.org/api/modules.html#modules_file_modules

所以做一个try catch块中的require并检查error.code == 'MODULE_NOT_FOUND'

 var m; try { m = require(modulePath); } catch (e) { if (e.code !== 'MODULE_NOT_FOUND') { throw e; } m = backupModule; } 

使用包装函数:

 function requireF(modulePath){ // force require try { return require(modulePath); } catch (e) { console.log('requireF(): The file "' + modulePath + '".js could not be loaded.'); return false; } } 

用法:

 requireF('./modules/non-existent-module'); 

当然基于OP的答案

如果问题是不存在的文件,你应该做的是:

 let fs = require('fs'); let path = require('path'); let requiredModule = null; // or a default object {} let pathToModule = path.join(__dirname, /* path to module */, 'moduleName'); if (fs.existsSync(pathToModule)) { requiredModule = require(pathToModule); } // This is in case the module is in node_modules pathToModule = path.join(__dirname, 'node_modules', 'moduleName'); if (fs.existsSync(pathToModule)) { requiredModule = require(pathToModule); }