在C+中处理JavaScript对象+;节点nan插件 < >我的代码正在传递一个JavaScript对象到C++中实现的函数。C++代码需要验证每个属性的类型,如果属性丢失或类型错误,则提供默认值。

在C+中处理JavaScript对象+;节点nan插件 < >我的代码正在传递一个JavaScript对象到C++中实现的函数。C++代码需要验证每个属性的类型,如果属性丢失或类型错误,则提供默认值。,javascript,c++,node.js,v8,node-nan,Javascript,C++,Node.js,V8,Node Nan,下面的代码似乎可以工作(仅显示整数情况),但我想知道是否有更直接的方法来处理这个问题。我绝对不是这方面的专家,所以欢迎所有改进建议 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::M

下面的代码似乎可以工作(仅显示整数情况),但我想知道是否有更直接的方法来处理这个问题。我绝对不是这方面的专家,所以欢迎所有改进建议

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;
}
int-get\u整数(
v8::本地对象,
v8::本地道具,
int默认值(u值=0){
if(Nan::Has(obj,prop).FromMaybe(false)){
Nan::MaybeLocal v=Nan::Get(对象,道具);
如果(!v.IsEmpty()){
v8::Local val=v.ToLocalChecked();
如果(val->IsInt32()| val->IsNumber()){
返回val->IntegerValue();
}
}
}
返回默认值;
}
它由类似于以下代码的代码调用:

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);
v8::Local obj=info[0]->ToObject();
v8::Local prop=Nan::新建(“prop”).ToLocalChecked();
int x=获取整数(obj,prop);

如果您想要的是一种简化,那么您应该看看NodeJs支持的新API

代码变得更轻,因为您不必直接触摸任何v8对象。官方主要是C,但是我建议你看C++的包装。文档不完整,但既然您已经使用了楠,它非常相似,您可以在它上面找到一些文章,也可以在C++版本的“节点ADONAPI”文件夹下找到。p>
存在一个将基于NaN的代码转换为N-API代码的方法,但是由于您大量使用v8构造,因此我建议您仅使用API重做这些部分

我已经了解了N-API,但需要支持节点版本6、8和10之间的代码。我知道它将被移植到6,但不幸的是,在此之前,N-API不是一个选项。我很感激你的建议,只希望它现在能对我有用-谢谢。