2017-04-08 3 views
0

nodejs用のC++モジュールがあります。メソッドの引数としてキー/値のペアを受け入れる必要があります。nodejs C++モジュールでmap引数を扱う方法

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

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

し、[プロパティを使用して:あなたは確信している場合

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

[OK]を、私は答えを見つけ...

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オブジェクトです:この後何をする

わかりませんマップの属性。

これが役に立ちます。

+0

のJavaScriptコードは、このです:VaRのmy_map = { 'KEY1': '値1'、 'KEY2': '値2'}。 \t これは地図オブジェクトですか? IsMap()は失敗しますが、IsObject()はTrueを返します。 – Sharath

+0

最新の調査結果で質問を更新しました。 – Sharath

関連する問題