1

我正在使用 Node.js 中的 C/C++ 编写附加组件。出于某种原因,我需要在 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:

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

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

4

1 回答 1

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());
}
于 2014-07-10T19:44:35.863 回答