c++ - 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));
你有什么建议吗?谢谢和欢呼!
解决方案
所有模板(包括 InstanceTemplate 的)只能在其中包含其他模板或原语。如您所见,IsTemplateInfo
当它应该是真的时,它是错误的。在这里提出并回答了一个类似的问题。只需制作一个ObjectTemplate,然后像使用FunctionTemplate
.
只有当模板被实例化(使用GetFunction
)时,您才能用真实对象填充它。
推荐阅读
- python - 使用 Python 发送公司电子邮件:TimeoutError
- c++ - 从虚拟析构函数错误 C++ 调用虚拟函数
- xml - 使用 Xpath 跳过指定单词后的空单元格
- expect - 期望脚本接受负数但不接受正数
- java - 使用最新版本时 upsert 的语法错误
- mysql - 获取多个插入行的 id
- ios - 使用 Web 视图反应原生和集成的第三方支付网关在苹果商店中是否可以接受?
- azure-blob-storage - 流分析的 blob 路径中不考虑自定义时间戳
- python - Irregular behaviour of celery
- reactjs - Whats the proper way of selecting selectedOption of select tag in react