2015-12-25 47 views
1

我正在使用Java DDPClient(https://github.com/kutrumbo/java-ddp-client),我試圖將數據插入流星應用程序。將數據添加到Java流星

我這樣做從Java:

DdpClient client; 
    try { 
     client = new DdpClient("localhost", 3000); 
     client.addObserver(this); 
     client.connect(); 
     Object[] objArray = new Object[1]; 
     objArray[0] = new String("{name:'peter andersson', phone:'12345678'}"); 
     client.call("createNewCustomer", objArray); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } catch (Exception ex) { 
     System.out.println("Exception:" + ex.getLocalizedMessage()); 
    } 

,這流星(收集客戶)

Meteor.methods({ 
    "createNewCustomer" : function(options) { 
     var ret = {}; 
     options.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value)  { 
     ret[param] = value; 
    }); 
    Customers.insert(ret); 
    } 
}); 

它的工作原理,但它似乎是不必要的工作,將其代碼轉換爲字符串,然後解碼它的JavaScript哈希映射。

我試圖創建一個對象(字符串)的數組,但無論我如何做它不按預期工作。

什麼是「正確」的做法?

編輯:

我的願望是,流星代碼是這樣的:

Meteor.methods({ 
    "createNewCustomer" : function(options) { 
     Customers.insert(options); 
    } 
}); 

我猜我想知道的是如何從Java(使用Java DDP客戶端)發送,這樣Meteor不需要解碼。

回答

1

正確的方法是使用JSON.parse()來解碼字符串。 只要確保該字符串是有效的JSON文檔。

在Java代碼中的變化

它:

objArray[0] = new String("{\"name\":\"peter andersson\", \"phone\":\"12345678\"}"); 

,並在你的JavaScript代碼現在看起來應該是這樣:

Meteor.methods({ 
    "createNewCustomer" : function(options) { 
    var ret = JSON.parse(options);    
    Customers.insert(ret); 
    } 
}); 

附:同樣在你的java代碼中,如果你想動態地使用JSON庫,你可能會考慮使用一些JSON庫來構造JSON字符串。

+0

好的,謝謝!然而,我想知道是否有可能在client.call()(從java-ddp-client項目)中發送對象數組。我沒有得到作者的回答,也找不到比此更好的Java DDP客戶端。我想我可以繼續將其編碼爲一個對象,並按照您的建議進行解碼。我只是希望有一種發送方式,以便不需要手動JSON編碼。我希望它儘可能地爲JS本機。 –

+0

我認爲你可能希望使用流星代碼,如果你在Java端正確編碼它。你可以嘗試像這樣http://www.tutorialspoint.com/json/json_java_example.htm,然後看看它如何在流星端(取決於ddp客戶端如何編碼它),也許不需要JSON解析。無論如何,如果我的答案足夠好,不要猶豫,接受它。 –