gpt4 book ai didi

javascript - 将任意 Javascript 数据对象传递给 Node.js C++ 插件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:37 24 4
gpt4 key购买 nike

我有一个使用 Nan 用 C++ 编写的 Node.js 插件。非常好用。但是,我一直无法弄清楚如何让我的 Node Javascript 代码传递任意数据对象(例如 {attr1:42, attr2:'hi', attr3:[5,4,3,2 ,1]}) 到 C++ 插件。

直到现在,我通过对我的数据对象调用 JSON.stringify() 然后在 C++ 端解析字符串化的 JSON 来解决这个问题。

理想情况下,我希望避免复制数据,而只是获取对我可以访问的数据对象的引用,或者至少在 native 复制它并避免字符串化/解析...

如有任何帮助,我们将不胜感激!

最佳答案

您可以允许您的 Node.js C++ 插件采用任意类型的参数,但您必须显式检查和处理类型。他是一个简单的示例函数,展示了如何做到这一点:

void args(const Nan::FunctionCallbackInfo<v8::Value>& info) {

int i = 0;
while (i < info.Length()) {
if (info[i]->IsBoolean()) {
printf("boolean = %s", info[i]->BooleanValue() ? "true" : "false");
} else if (info[i]->IsInt32()) {
printf("int32 = %ld", info[i]->IntegerValue());
} else if (info[i]->IsNumber()) {
printf("number = %f", info[i]->NumberValue());
} else if (info[i]->IsString()) {
printf("string = %s", *v8::String::Utf8Value(info[i]->ToString()));
} else if (info[i]->IsObject()) {
printf("[object]");
v8::Local<v8::Object> obj = info[i]->ToObject();
v8::Local<v8::Array> props = obj->GetPropertyNames();
for (unsigned int j = 0; j < props->Length(); j++) {
printf("%s: %s",
*v8::String::Utf8Value(props->Get(j)->ToString()),
*v8::String::Utf8Value(obj->Get(props->Get(j))->ToString())
);
}
} else if (info[i]->IsUndefined()) {
printf("[undefined]");
} else if (info[i]->IsNull()) {
printf("[null]");
}
i += 1;
}
}

要真正解决处理可能包含具有任意数据的对象的任意参数的问题,我建议编写一个函数来解析实际对象,类似于我在本例中解析函数参数的方式。请记住,如果您希望能够处理对象内的嵌套对象,则可能需要递归执行此操作。

关于javascript - 将任意 Javascript 数据对象传递给 Node.js C++ 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46222949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com