我有一个与 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
完整地返回我发送给它的对象而不是修改它?我猜测我现在看到的行为是设计使然 - 如果这是真的,我该如何更改它?
最佳答案
您不能将函数序列化为 JSON。如果你真的需要发送函数,那么你必须 .toString()
它们,发送它们,然后 eval
或 new Function
它们重新存在,但这是一个冒险的提议……为什么需要发送方法?
编辑: OP 添加了一条评论,他试图做的是通过和 Ace 编辑器 Range
对象通过网络...我认为你会更好关闭仅发送构建新 Range 对象所需的数据。所以只需发送 startRow、startCol、endRow 和 endCol,然后在线路的另一端,您可以执行新的范围(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);
})
关于javascript - 当我将 JS 对象发送到 Node.js 服务器并要求返回相同的对象时,服务器发回修改后的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10451243/