2017-04-08 46 views
0

我有一個用於nodejs的C++模塊。我需要接受一個鍵/值對作爲方法的參數。如何處理nodejs C++模塊中的map參數

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? 
} 

回答

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

如果你確定這是一個Map對象,你可以通過這個代碼檢索:

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

然後使用屬性和地圖的屬性。

希望這會有所幫助。

+0

的JavaScript代碼是這樣的:var my_map = { '鍵1': '值1', 'KEY2': '值'}; \t 這是一個地圖對象嗎?它失敗了IsMap(),但對於IsObject()返回true。 – Sharath

+0

我更新了最新發現的問題。 – Sharath