处理node.js中的require()模块引发的错误
在试图require()模块不存在的时候,在我的代码中有一点障碍。 代码循环遍历目录,并在每个文件夹上执行var appname = require('path')
。 这适用于适当configuration的模块,但会引发: Error: Cannot find module
循环遇到非Error: Cannot find module
时Error: 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); }
- domain.dispose()在nodejs中做了什么? 有没有钩子?
- 为什么在节点7.2.0中logging被拒绝的`Promise`会导致logging一个堆栈跟踪?
- 如何正确处理与IcedCoffeeScript错误?
- 在sails中debugging时收听EADDRINUSE错误
- 当收到Error对象时,如何停止函数?
- Node.jserror handling保证与net.createConnection
- 如何处理内部服务器API和HTTP API之间的错误
- 节点:async.foreach失败时,错误未捕获exception被抛出
- 我可以指定如何处理asynchronousJavaScript库中的错误?