如何抛出异常并在Node.js中捕获它?

时间:2013-08-18 02:50:55

标签: c++ node.js exception

我在Node.js中使用C / C ++编写ADD-ON。出于某种原因,我需要在C / C ++ Add-on端抛出异常,并在JavaScript端捕获异常。

JavaScript方面:

try {

var conn = addon.get(); 

} catch(e) {
  console.log("catching....................");
}

C / C ++代码:

if (args.Length() <= 1 && !args[1]->IsFunction()) {
    ThrowException(Exception::TypeError(String::New("Arguments 1 expect a function!")));
}

实际行为是: 对于WIN: 弹出对话框并显示:


Microsoft Visual C ++运行时库

  

断言失败了!

     

程序:... verMananger \ src \ wrapper \ build \ Release \ nodedb2.node文件:   c:\ users \ ibm_admin.node-gyp \ 0.10.1 ... \ node_ob ..._ wrap.h行:60

表达式:!handle.IsEmpty()

有关程序如何导致断言的信息 失败,请参阅关于断言的Visual C ++文档

(按重试调试应用程序 - 必须启用JIT)

中止重试忽略

对于Linux:

  

node:/root/.node-gyp/0.10.9/src/node_object_wrap.h:60:static T *   node :: ObjectWrap :: Unwrap(v8 :: Handle)[with T =   NodeDB2Connection]:断言`!handle.IsEmpty()'失败。

如何抛出异常并在Node.js中捕获它?每个人遇到的问题和我遇到的一样吗?

1 个答案:

答案 0 :(得分:0)

一切都很好看,除非你没有归还任何东西。向节点抛出异常与常规C ++异常不同。您需要做的就是在通话结束后添加以下内容,您应该做得很好:

return scope.Close(Undefined());

所以一切都会是这样的:

if (args.Length() <= 1 && !args[1]->IsFunction()) {
  ThrowException(Exception::TypeError(String::New("Arguments 1 expect a function!")));
  return scope.Close(Undefined());
}