Program Tip

node.js의 require () 모듈에서 발생한 오류 처리

programtip 2020. 12. 8. 19:54
반응형

node.js의 require () 모듈에서 발생한 오류 처리


존재하지 않는 모듈을 require ()하려고 할 때 내 코드에 약간의 걸림돌이 있습니다. 코드는 디렉토리를 반복 var appname = require('path')하고 각 폴더에서 수행합니다. 이것은 적절하게 구성된 모듈에 대해 작동하지만 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)
}

주어진 경로가 존재하지 않으면 require ()는 코드 속성이 'MODULE_NOT_FOUND'로 설정된 오류를 발생시킵니다.

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

따라서 try catch 블록에서 요구 사항을 확인하고 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);
}

참고 URL : https://stackoverflow.com/questions/13197795/handle-errors-thrown-by-require-module-in-node-js

반응형