调用node.js fork时处理“找不到模块”错误

吉姆101

如何捕获调用不存在的文件的.fork()错误?

var cp = require('child_process');
var fk = cp.fork("missing-file.js");

喷涌而出

module.js:340
    throw err;
      ^
Error: Cannot find module 'path-to-here/missing-file.js'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

我试过了

try {
    var cp = require('child_process');
    var fk = cp.fork("missing-file.js");
} catch(err) {
    console.log("async error doesn't get caught here.");
}

fk.on('error', function(err) {
   console.log("this never gets called");
})

process.on('uncaughtException', function(err) {
  console.log("this never gets called either");
});

但是这些都没有发现错误。

Joyent的文档说,在以下情况下应发出错误事件:

  1. 无法产生该过程,或者
  2. 该进程无法终止,或者
  3. 由于任何原因,向子进程发送消息均失败。

但这似乎发生在#1之前。

我查看了Node.js中require()模块引发的Handle错误,但是那里的解决方案不起作用。

如何捕获此错误?

亚伦·杜福(Aaron Dufour)

这里没有错误。node启动就很好,找不到文件,然后退出。这些事情都不会在父进程中引发错误。但是,第二步(“无法找到文件”)导致子进程在其上发出一些文本stdout,默认情况下该文本是从父进程继承的。这就是你所看到的文本的源(压制它,通过forksilent: true选项)。

如果您尝试检测到此错误,则可以在close事件上放置一个处理程序该处理程序将使用2个参数调用,但是您只关心第一个参数:退出代码。当Node找不到源文件时,它使用退出代码8(尽管请注意,脚本也可以使用退出代码8,因此这不是防弹的)。请注意,退出代码0通常表示该过程成功结束。

因此,如果您要对未找到的文件执行操作并禁止将错误消息发送到stdout,则可以:

var cp = require('child_process');
var fk = cp.fork("missing-file.js", {silent: true});
fk.on('close', function(code) {
  if(code == 8) {
    // Handle the missing file case here.
  }
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js-当模块调用其他模块时,“找不到模块”

来自分类Dev

Node.js“错误:找不到模块”

来自分类Dev

错误:在node.js上渲染灰尘模板时找不到“灰尘”模块

来自分类Dev

Node.js错误:找不到模块“请求”

来自分类Dev

Node.js:错误:找不到模块“ html”

来自分类Dev

Node.js-错误:找不到模块“ config / chgpass”

来自分类Dev

在Node JS mysql错误中找不到模块'./routes/customer'

来自分类Dev

Node.js 错误:找不到模块“firebase/storage”

来自分类Dev

Node.js Express 错误:找不到模块

来自分类Dev

Node.js找不到模块

来自分类Dev

Node.js:找不到模块“ chai”

来自分类Dev

在Node.js中找不到模块

来自分类Dev

找不到Node.js模块

来自分类Dev

Node.js找不到模块

来自分类Dev

在Node.js中找不到模块

来自分类Dev

找不到node.js模块

来自分类Dev

模块内部的node.js调用查询

来自分类Dev

如何修复Node.js错误:找不到模块“沉浸式”

来自分类Dev

Node.js错误:在ec2中找不到模块..

来自分类Dev

如何修复Webpack错误:找不到模块-on node.js(webpackEmptyContext)

来自分类Dev

Node.js + browserify-错误:找不到模块“ cls-bluebird”

来自分类Dev

调用API“找不到模块”时,AWS Lambda层错误

来自分类Dev

运行Iron-Node时module.js找不到模块

来自分类Dev

使用自定义Node.js插件时,“找不到指定的模块”

来自分类Dev

运行Iron-Node时module.js找不到模块

来自分类Dev

Node.js Express JS-找不到模块

来自分类Dev

模块化gulp / node.js,调用模块变量

来自分类Dev

认真调试node.js'找不到模块xyz / abcd'

来自分类Dev

node.js找不到模块'./lib/compat'