我在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: 弹出对话框并显示:
断言失败了!
程序:... 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 ++文档
对于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中捕获它?每个人遇到的问题和我遇到的一样吗?
答案 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());
}