当我发送一个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()
,发送它们,然后eval
或new 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