74

存在しないモジュールを require() しようとすると、コードに少し問題が発生します。コードはディレクトリをループし、var appname = require('path')各フォルダーに対して a を実行します。Error: Cannot find moduleこれは、適切に構成されたモジュールに対して機能しますが、ループが非モジュールにヒットしたときにスローします。

プロセス全体を停止させるのではなく、このエラーを適切に処理できるようにしたいと考えています。要するに、によってスローされたエラーをどのようにキャッチしますrequire()か?

ありがとう!

4

4 に答える 4

66

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)
}
于 2012-11-03T23:48:51.727 に答える
44

指定されたパスが存在しない場合、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;
}
于 2016-08-11T00:04:27.123 に答える
15

ラッパー関数を使用します。

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の回答に基づいて

于 2015-11-30T18:02:19.380 に答える