由模块引起的处理错误 require// 在 node.js

尝试时在我的代码中有一个小的线束 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 ... dules
所以需要尝试捕获单位并检查吗?
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/;
}

要回复问题请先登录注册