try nodejs node errores error err_invalid_callback catch javascript node.js error-handling

javascript - nodejs - Manejar los errores lanzados por el módulo require() en node.js



try catch javascript (4)

tener un pequeño inconveniente en mi código al tratar de requerir () módulos que no existen. El código recorre un directorio y tiene un var appname = require(''path'') en cada carpeta. Esto funciona para los módulos configurados apropiadamente, pero arroja: Error: Cannot find module cuando el ciclo llega a un módulo que no es de módulo.

Quiero ser capaz de manejar este error con elegancia, en lugar de dejar que detenga todo mi proceso. En resumen, ¿cómo se detecta un error lanzado por require() ?

¡Gracias!


Si la ruta dada no existe, require () arrojará un error con su propiedad de código establecida en ''MODULE_NOT_FOUND''.

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

Así que haz un requerimiento en un bloque try catch y busca el error.code == ''MODULE_NOT_FOUND''

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


Si el problema es con archivos que no existen, lo que debes hacer es:

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); }


Use una función de envoltura:

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

Uso:

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

Basado en la respuesta OP por supuesto


parece que un bloque try / catch hace el truco en esto, por ejemplo

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) }