c++ - 将对象传递给 Node.js C++ 插件
问题描述
我正在关注上面的文章,试图访问传递给 C++ 节点插件函数的对象中的字符串。我的功能在下面,但我无法将它作为插件编译。当我这样做时,我收到错误:
../addon.cpp:239:26: error: no viable conversion from 'MaybeLocal<v8::Value>' (aka 'v8::MaybeLocal<v8::Value>') to 'v8::Local<v8::Value>'
v8::Local<v8::Value> pwdValue = Nan::Get(obj, pwdProp);
^ ~~~~~~~~~~~~~~~~~~~~~~
关于如何解决此错误的任何想法?谢谢
NAN_METHOD(init) {
v8::Local<v8::Object> obj = info[0]->ToObject();
v8::Local<v8::String> pwdProp = Nan::New("PWD").ToLocalChecked();
std::string pwd = "";
if (Nan::HasOwnProperty(obj, pwdProp).FromJust()) {
v8::Local<v8::Value> pwdValue = Nan::Get(obj, pwdProp);
pwd = std::string(*Nan::Utf8String(pwdValue->ToString()));
}
std::cout << pwd << std::endl;
}
解决方案
Nan::Get
返回 a ,由于文档MaybeLocal
中提到的原因,它可能为空。
您可以使用如下方式Local
从 a 获取句柄:MaybeLocal
.ToLocalChecked()
v8::Local<v8::Value> pwdValue = Nan::Get(obj, pwdProp).ToLocalChecked();
要检查 MaybeLocal 是否真的持有一个值,你可以检查bool isEmpty = Nan::Get(obj, pwdProp).IsEmpty()
.
推荐阅读
- javascript - 移动鼠标时在 Firefox 中出现生涩的 javascript 动画
- android - 您的应用不符合 Google Play 政策,但确实如此
- rabbitmq - RabbitMQ Http Authentication Backend with SSL
- fortran - Undefined symbols for architecture x86_64 in a NLopt Fortran compilation
- python - Two-point Euclidean distance from csv file
- rust - 所有权转移后的变异变量
- r - 如何加入相似字符的数据集?
- swift - 以版本为条件的 Swift 扩展
- wpf - 使用 MVVM 的 WPF 自定义模式对话框
- algorithm - Algorithm to find multiple short paths