在node.js中需要模块时捕获错误

时间:2013-07-09 16:22:33

标签: javascript node.js error-handling require

似乎无法在任何地方找到任何文章。我基本上想从程序中捕获“无法找到模块”错误,并可选择安装它,但我似乎无法捕获任何错误,即使在我的require语句中使用try / catch也是如此。这甚至可能吗?我没有在任何地方看到它。

例如:

try {
  var express = require('express');
} catch (err){
   console.log("Express is not installed.");
   //proceed to ask if they would like to install, or quit.
   //command to run npm install
}

我认为这可以使用单独的.js启动文件来完成,而不需要任何第三方要求,只需使用fs检查node_modules,然后可以选择从子项运行npm install进程,然后与另一个孩子一起运行node app。但感觉在单个app.js文件中执行此操作会更容易

2 个答案:

答案 0 :(得分:18)

为了使其正确,请确保仅为给定模块捕获 Module not found 错误:

try {
    var express = require('express');
} catch (e) {
    if (e.code !== 'MODULE_NOT_FOUND') {
        // Re-throw not "Module not found" errors 
        throw e;
    }
    if (e.message.indexOf('\'express\'') === -1) {
        // Re-throw not found errors for other modules
        throw e;
    }

}

答案 1 :(得分:8)

对你而言,这对我来说很好。你确定文件系统中的上方某处没有node_modules/express文件夹需要查找吗?尝试这样做是为了清楚发生了什么:

try {
  var express = require('express');
  console.log("Express required with no problems", express);
} catch (err){
   console.log("Express is not installed.");
   //proceed to ask if they would like to install, or quit.
   //command to run npm install
}