如何在nodejs C ++模块中处理map参数

时间:2017-04-08 17:51:55

标签: c++ node.js v8

我有一个用于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?
}

2 个答案:

答案 0 :(得分:0)

如果您确定它是Map对象,可以通过以下代码检索它:

public void loadPopUp(Form from, Form to)
{
    to.Tag = from;
    to.Show(from);
}

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

希望这有帮助。

答案 1 :(得分:0)

好的,我找到了答案......

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));
}