当我将 JS 对象发送到 Node.js 服务器并请求返回相同的对象时,服务器会发回一个修改后的对象
When I send a JS object to a Node.js server and ask for the same object back, the server sends back a modified object
>我有一个与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,然后在线路的另一端,您可以执行新的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,对于它node,节点有一个很棒的库叫做dnode。 https://github.com/substack/dnode
相关文章:
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 如何在HTML中显示服务器对象变量
- 将值传递到服务器对象
- 错误:自动化服务器可以't创建对象
- 在Javascript服务器/客户端中共享对象定义
- 如何使用Knockout Mapping插件映射到来自服务器对象的数组,并进行一些计算
- 如何从jQuery对象文本正确调用服务器端ASP.NET并将数据返回给jQuery
- 如何将对象数组从javascript传递到服务器
- 如何上传一个XML对象并用Perl将其保存在服务器上
- 解析服务器云代码保存对象
- 从Javascript for jqGrid通过JSON发送服务器端对象
- 设置对象文字数组以将值传递给服务器
- 添加到序列化数组中的复杂对象在服务器端始终为 null
- 当对象从服务器发送到客户端时,JS原型方法消失了
- 将 JSON 对象转换为序列化字符串以进行服务器端处理
- 如何在 http 上调用 end().服务器响应对象
- 为什么JSON对象序列化是需要的或重要的发送ajax调用到服务器
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- Meteor 方法返回客户端和服务器上的不同对象
- Jquery-从服务器中引入json对象