当我发送一个JS对象到一个Node.js服务器并要求返回同一个对象时,服务器发送一个修改后的对象

我有一个网页,build立与node.js服务器的通信。 我发送它的对象,并返回它收到的同一个对象。 但是,返回的对象是不同的 – 它的所有方法都不见了。

这是显示我在做什么的代码。 我用一个对象发送一个事件:

 editor.getSession().on('change', function(event) { socket.emit('modificarCodigo', event); }); 

我这样回来:

 socket.on('modificarCodigo', function(data) { socket.broadcast.to(socket.grupo).emit('actualizarCodigo', data); }); 

我怎样才能让node.js返回我发送给它的对象,而不是修改它呢? 我有一个猜测,我现在看到的行为是由devise – 如果这是真的,我怎么能改变它?

你不能将函数序列化成JSON。 如果你真的需要发送函数,那么你必须.toString() ,发送它们,然后evalnew Function返回到存在,但这是一个冒险的命题…为什么你需要发送方法?

编辑: OP添加了一个评论,他正在尝试做的是传递和Ace编辑器Range对象通过电线…我想你会更好地发送只需要build立一个新的Range对象的数据。 所以只需发送startRow,startCol,endRow和endCol,然后在另一端可以执行新的Range(data.startRow,data.startCol,data.endRow,data.endCol)。

作为一个方面说明,可以使用toJSON方法来处理对象的正确序列化(如果您的js引擎支持JSON.stringify / parse)。 这里是一个例子:

 function Dude(name, age) { this.name = name; this.age = age; } Dude.prototype = { speak: function() { alert('My name is ' + this.name); }, toJSON: function() { return { type: 'Dude', props: { name: this.name, age: this.age } }; } }; http.get('http://getadude.com', function(json) { var data = JSON.parse(data); if(type === 'Dude') data = new Dude(data.props.name, data.props.age); }) 

在发送之前将对象序列化为JSON,然后对其进行解码。 它应该工作。

听起来像你真正想要的RPC,为其节点有一个叫做dnode真棒库。 https://github.com/substack/dnode