2012-11-10 24 views
2

我遇到的问题是,使用Node.js编写的休息客户端能够将数据(通过GET)发送到ServiceStack JSON基于服务。这给我一个序列化错误。然而,我已经复制并粘贴了相同的JSON(由我的Node.js休息客户端生成)到通过CURL和ServiceStack发送的ServiceStack服务的调用中,JSON没有问题 - 只是...只要它来自CURL。如何让Node.js REST客户端能够与ServiceStack JSON服务进行通信

任何人都可以摆脱任何指针或进一步的启示将非常感谢!

感谢,

塔米

回答

6

所以我想通了,如何让上述工作中的Node.js,而不仅仅是在卷曲(发送/接收JSON到ServiceStack JSON服务)。

我做了以下内容:

  • 使用 “restler” 包我的HTTP通讯包装
  • 使用restler的 “获得()” 方法...不要使用“JSON( )”方法
    (代码片段如下...)

    var obj = {}; 
    obj.objectName = 'foo'; 
    obj.foos = [{firstname: 'foo1', lastname: 'foo-you'}, {firstname: 'foo2', lastname: 'foo-you-2'}]; 
    var json = JSON.stringify(obj); 
    var options = { 
        method: "get", 
        data: json, 
        headers: {'Content-type': 'application/json', 'Accept': 'application/json'} 
    }; 
    rest.get('http://localhost/servicestack-api/getmethod', options). 
        on('complete', function(data, response){ 
         console.log(data); 
         console.log(response.statusCode); 
    
        }); 
    
  • 请务必填写上面的正确的URL和远程DTO您ServiceStack服务和方法

FYI

如果你的JSON不序列到远程DTO在ServiceStack,一个快速的方法来测试将是复制和粘贴存储在“JSON”变量上成的JSON curl命令查看它是否以正确的方式序列化。
(下面的示例卷曲片段...)

这就是我最初(请参阅原始问题)尝试解决序列化问题的麻烦。它帮助我将问题隔离到restler/Node.js端,这样我就可以进行上面看到的修改 - 即不使用restler的“json()”方法。

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X GET -d '{"foos":[{"firstname":"foo1","lastname":"foo-you"}, {"firstname": "foo2", "lastname": "foo-you-2"}],"objectName": "foo"}' http://localhost/servicestack-api/getmethod 
相关问题