我读到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#没有方法' GetEthernet'"并为Object.keys"返回一个空数组。
答案 0 :(得分:2)
我没有使用过nowjs,但是如果能在服务器和客户端之间发送完整的 JavaScript对象 - 也就是具有原型链和方法的对象,我会感到非常惊讶。无论您使用什么框架,在客户端和服务器之间传递的对象都需要序列化为字符串;在JavaScript的情况下,这通常意味着JSON序列化。如果nowjs文档说你可以传递一个对象,它们可能意味着一个普通的JavaScript对象,一个JSON可序列化的对象。否则,您必须序列化对象方法并将它们发送给客户端进行重新解释,除了最简单的方法之外,这些方法都没有任何意义。
长话短说,尝试传递profile.GetEthernet()
的输出,而不是传递profile
并调用方法。如果您需要传递更多关于profile
的数据,您可以使用各种方法输出创建一个对象并发送它。