我的代码是将JavaScript对象传递给用C ++实现的函数。 C ++代码需要验证每个属性的类型,并在缺少属性或类型错误时提供默认值。
以下代码似乎有效(仅显示整数情况),但我想知道是否有更简单的方法来处理这个问题。我绝不是这方面的专家,所以欢迎所有改进建议。
int get_integer(
v8::Local<v8::Object> obj,
v8::Local<v8::String> prop,
int default_value = 0) {
if (Nan::Has(obj, prop).FromMaybe(false)) {
Nan::MaybeLocal<v8::Value> v = Nan::Get(obj, prop);
if (!v.IsEmpty()) {
v8::Local<v8::Value> val = v.ToLocalChecked();
if (val->IsInt32() || val->IsNumber()) {
return val->IntegerValue();
}
}
}
return default_value;
}
它的代码类似于以下代码:
v8::Local<v8::Object> obj = info[0]->ToObject();
v8::Local<v8::String> prop = Nan::New<v8::String>("prop").ToLocalChecked();
int x = get_integer(obj, prop);
答案 0 :(得分:1)
如果您正在寻找的是简化,那么您应该查看NodeJ支持的名为N-API的新API。
代码变得更轻,因为您永远不必直接触摸任何v8对象。官方documentation主要用于C,但我建议您查看C ++包装。文档不完整,但由于您已经使用过NaN,因此它非常相似,您可以在C ++版本的“node-addon-api”文件夹下找到一些文章以及the examples。
存在conversion tool以将基于NaN的代码转换为N-API代码,但由于您大量使用v8构造,我建议您仅使用API重做这些部分。