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



我正在Node.js中使用C/C++编写一个ADD-ON。出于某种原因,我需要在C/C++插件端抛出异常,并在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

表达式:!手柄IsEmpty()

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

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

中止重试忽略

对于Linux:

node:/root/.node gyp/0.10.9/src/node_object_wrap.h:60:static T*node::ObjectWrap::展开(v8::Handle)[带T=NodeDB2Connection]:断言`!手柄IsEmpty()'失败。

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

除了没有返回任何内容之外,一切看起来都很好。向节点抛出异常与常规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());
}

最新更新