2

我试图在 NodeJs 中使用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 的新手。

4

1 回答 1

2

好吧,我这几天一直在寻找解决方案,我解决了我的问题。首先我的代码是错误的(文档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 的工作方式。他们不会从服务器发回错误,他们只是上升和错误字符串。他们的代码上有这个:

if (!res.headers.location) {
    // Server sent redirect response without Location header.
    _emit('error', new Event('error'));
    return;
}
于 2014-10-01T15:09:05.270 回答