2015-12-25 46 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解析。无论如何,如果我的答案足够好,不要犹豫,接受它。 –