我正在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());
}