首页 > 解决方案 > NodeJS Nan C++ 将嵌套对象绑定到插件实例

问题描述

在我目前正在处理的 C++ NodeJS 项目中,我想要一个包含嵌套对象的对象,例如

console.log(object.myObject); // { [keys: string]: any }

如果没有将对象绑定到属性,我的插件运行良好。我创建实例

auto ctor = Nan::New<v8::FunctionTemplate>(New);
auto ctorInst = ctor->InstanceTemplate();

并将对象绑定到类实例,如

v8::Local<v8::Object> obj = Nan::New<v8::Object>();
ctorInst->Set(Nan::New("myObject").ToLocalChecked(), obj);

在执行 JS 代码时打印以下内容(创建 C++ 扩展的实例)。

# 致命错误,第 0 行

# 检查失败:!value_obj->IsJSReceiver() || value_obj->IsTemplateInfo()。

另一方面,绑定原语(数字、字符串等)完美无缺。

ctorInst->Set(Nan::New("myObject").ToLocalChecked(), Nan::New<v8::Number>(42));

你有什么建议吗?谢谢和欢呼!

标签: c++node.jsv8

解决方案


所有模板(包括 InstanceTemplate 的)只能在其中包含其他模板或原语。如您所见,IsTemplateInfo当它应该是真的时,它是错误的。在这里提出并回答了一个类似的问题。只需制作一个ObjectTemplate,然后像使用FunctionTemplate.

只有当模板被实例化(使用GetFunction)时,您才能用真实对象填充它。


推荐阅读