【问题标题】:Passing objects with callback arguments in Nowjs在 Nowjs 中传递带有回调参数的对象
【发布时间】:2012-04-26 09:30:29
【问题描述】:

我读到 nowjs 支持传递对象以及字符串,但由于某种原因我遇到了问题。这是他们网页中的 nowjs 示例,只有一个字符串被解析并且对我来说工作正常,

客户端

  now.test('foo', function(msg){
       console.log(msg);
  });

服务器端

everyone.now.test = function(val, callback){
  callback(val + ' bar!');
}

下面的代码我尝试传递并反对 val,

客户端

now.test('default', function(msg){
       console.log(Object.keys(msg));
       console.log(msg.GetEthernet());
  });

服务器端

everyone.now.test = function(val, callback){
    var profile = honeydConfig.GetProfile(val);
    console.log("Got eth " + profile.GetEthernet() + " for profile " + profileName);
    callback(profile);
}

在服务器端,它打印 GetEthernet 函数的正确输出。在客户端它只是说,“Uncaught TypeError: Object # has no method 'GetEthernet'”并为 Object.keys 返回一个空数组。

【问题讨论】:

    标签: javascript node.js nowjs-sockets


    【解决方案1】:

    我没有使用 nowjs,但是如果它可以在服务器和客户端之间发送 full JavaScript 对象,我会感到非常惊讶 - 即具有原型链和方法的对象。无论您使用什么框架,在客户端和服务器之间传递的对象都需要序列化为字符串;对于 JavaScript,这通常意味着 JSON 序列化。如果 nowjs 文档说你可以传递一个对象,他们可能是指一个普通的 JavaScript 对象,一个 JSON 可序列化的对象。否则,您必须序列化对象方法并将它们发送给客户端重新解释,这对除了最微不足道的方法之外的所有方法都没有任何意义。

    长话短说,尝试传递profile.GetEthernet() 的输出,而不是传递profile 并调用该方法。如果您需要传递更多关于profile 的数据,您可以创建一个具有各种方法输出的对象并将其发送。

    【讨论】:

    • 就是这样。在服务器端添加了“profile.ethernet = profile.GetEtherent()”并且它起作用了。显然它可以发送对象的成员变量,但不能发送方法,这是有道理的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2023-04-04
    • 2016-02-16
    • 2018-11-19
    相关资源
    最近更新 更多