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

标签 javascript json node.js socket.io

我有一个与 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() 它们,发送它们,然后 evalnew 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/

相关文章:

Javascript:如何动态更新我的闭包?

javascript - Jquery的change()方法无法正常工作

javascript - 使用正则表达式重新格式化包含英国邮政编码的字符串

node.js - 有没有一个库可以在node.js中实现pusher.com?

arrays - 使用 MongoDB 的复选框数据

javascript - Meteor 模板不使用点击事件更新

javascript - 谁能解释一下这个关键字的行为

javascript - 如何在单个页面中创建多个共享按钮

javascript - 将项目数据从 JSON 文件动态加载到 React 中

java - 解析 JSON 数据并将其保存到 MongoDB