Porównaj ceny domen i usług IT, sprzedawców z całego świata

Obsługuj błędy spowodowane przez moduł require () w node.js.


mam mały problem w moim kodzie podczas próby wymagania () dla modułów, które nie istnieją.
Kod iteruje po katalogu i nie
var appname = require ('path')
dla każdego folderu. Działa to dla poprawnie skonfigurowanych modułów, ale wyświetla:
Error: Cannot find module
, gdy pętla trafia w inny niż moduł.
Chcę móc z wdziękiem poradzić sobie z tym błędem, zamiast pozwolić mu zatrzymać cały proces. Krótko mówiąc, w jaki sposób można złapać błąd generowany przez
require ()
?
Podziękować!
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

wygląda na to, że blok try/catch załatwia sprawę, na przykład
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)
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli określona ścieżka nie istnieje, require () zgłosi błąd z właściwością code ustawioną na „MODULE_NOT_FOUND”.

https://nodejs.org/api/modules ... dules
https://nodejs.org/api/modules ... dules
Więc musisz to zrobić, próbując złapać blok i sprawdzić
error.code == 'MODULE_NOT_FOUND'
var m;
try {
m = require(modulePath);
} catch (e) {
if (e.code !== 'MODULE_NOT_FOUND') {
throw e;
}
m = backupModule;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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

Za pomocą:
requireF('./modules/non-existent-module');

Oczywiście w oparciu o odpowiedź PO
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli problem dotyczy plików, które nie istnieją, wykonaj następujące czynności:
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);
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się