如何将错误对象传递给socket.io回调

Bar*_*klı 10 javascript node.js socket.io

我正在使用socket.io回调

客户代码:

socket.emit('someEvent', {data:1}, function(err, result) {
    console.log(err.message); 
});
Run Code Online (Sandbox Code Playgroud)

服务器代码:

socket.on('someEvent', function(data, callback) {
    callback(new Error('testing error'));
});
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,客户端总是打印出来undefined.如果我将服务器端代码更改为以下内容,则可以看到错误消息.

socket.on('someEvent', function(data, callback) {
    callback({message:'testing error'});
});
Run Code Online (Sandbox Code Playgroud)

我可以将自己的自定义对象传递给客户端,只是没有错误对象.有任何想法吗?

log*_*yth 11

socket.io数据被序列化为JSON,只能表示普通对象.您需要将任何错误序列化为可识别的普通对象格式,或者让Socket.IO的标准序列化执行其操作(这将导致Error实例的纯空对象).

  • 实际的f字是什么?在这篇文章(http://www.devthought.com/2011/12/22/a-string-is-not-an-error/)中,Socket.io的创建者继续谈论你应该如何总是传递错误对象关于而不仅仅是简单的字符串或类似的东西,然后再次在Socket.io文档中他提到在回调中使用错误对象(http://socket.io/docs/server-api/#namespace#use( fn:function):namespace)但实际上只是将它们转换为空对象?我很困惑! (3认同)
  • @GoloRoden抱歉,这意味着手动定义序列化格式,或者让socket.io序列化为无用的JSON.stringify(new Error())==='{}')。 (2认同)