使用EventSource获取有关错误的信息

时间:2014-09-26 22:46:49

标签: node.js error-handling event-stream etw-eventsource

我尝试在NodeJ中使用EventSource时获取有关错误的信息,我想您可以通过以下示例更好地理解我:

var url = 'http://api.example.com/resource'
var EventSource = require('eventsource');

var es = new EventSource(url);
es.onmessage = function(e) {
   console.log(e.data);
};

es.onerror = function(event) {
   console.log(event);
};

onerror 函数中,我想获取有关错误的信息,但 event 为空或未定义作为 es 对象(好吧,这个对象只带有一对花括号{})。我想在出现错误的情况下阅读响应标题,例如:

es.onerror = function(e) {
   console.log(e.header.location);
};

这可能吗?我错过了什么?我认为答案应该很简单,但我是NodeJs的新手。

1 个答案:

答案 0 :(得分:1)

好吧,我一直在寻找解决方案几天,我解决了我的问题。首先我的代码是错误的(EventSource的文档没有更新),所以我的代码应该是这样的:

var url = 'http://api.example.com/resource'
var es = new EventSource(url);

es.on('status', function(e) {
    console.log(e.data);
  }).on('result', function(e) {
    console.log(e.data);
  }).on('error', function() {
   console.log('ERROR!');
   es.close()
  });
}); 

因此,来自服务器的异步响应位于e.data对象中,示例应如下所示:

var url = 'http://api.example.com/resource'
var es = new EventSource(url);

es.on('status', function(e) {
    console.log(e.data);
  }).on('result', function(e) {
    var jsonData = JSON.parse(e.data);
    console.log(e.data, jsonData.url);
  }).on('error', function() {
   console.log('ERROR!');
   es.close()
  });
}); 

请注意,我们还没有关于错误的信息,但这是因为EventSource的工作方式。他们不会从服务器发回错误,他们只是上升和错误字符串。他们在they code

上有这个
if (!res.headers.location) {
    // Server sent redirect response without Location header.
    _emit('error', new Event('error'));
    return;
}