【问题标题】:How to handle a map argument in a nodejs C++ module如何处理 nodejs C++ 模块中的地图参数
【发布时间】:2017-04-08 17:51:54
【问题描述】:

我有一个用于 nodejs 的 C++ 模块。我需要接受一个键/值对作为方法的参数。

var my_map = {'key1': 'value1','key2': 'value2'};

不知道之后该怎么办:

void MyClient::AcceptData(const FunctionCallbackInfo<Value>& args)
{
    Isolate* isolate = args.GetIsolate();

    if (args.Length() != 1)
    {
        isolate->ThrowException(v8::Exception::TypeError(String::NewFromUtf8(isolate,
            "Usage: Key/Value Map")));
        return;
    }
// It returns true for args[0]->isObject(), but not for args[0]->IsMap()

// Now what? How do I get a C++ map out of args[0] ?
// What do I cast it into?
}

【问题讨论】:

    标签: c++ node.js v8


    【解决方案1】:

    如果你确定它是一个 Map 对象,你可以通过这段代码来检索它:

    Handle<Map> map = Handle<Map>::cast(args[0]);
    

    然后使用地图的属性和属性。

    希望这会有所帮助。

    【讨论】:

    • javascript 代码是这样的: var my_map = {'key1': 'value1','key2': 'value2'};那是地图对象吗? IsMap() 失败,但 IsObject() 返回 true。
    【解决方案2】:

    好的,我找到了答案……

    v8::Local<v8::Object> obj = args[0]->ToObject();
    v8::Local<v8::Array> props = obj->GetPropertyNames();
    std::map<std::string, std::string> theMap;
    for (unsigned int i = 0; i < props->Length(); i++)
    {
        char key[1000], value[1000];
        props->Get(i)->ToString()->WriteUtf8(key, 1000);
        obj->Get(props->Get(i))->ToString()->WriteUtf8(value, 1000);
        theMap.insert(std::make_pair(key, value));
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 2020-06-23
      • 2017-10-07
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2017-05-05
      相关资源
      最近更新 更多