获取有关EventSource错误的信息

7

我正在尝试获取使用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 为空或未定义,以及< strong> es 对象(好吧,这个对象只是一对花括号< code> {} )。如果出错,我想读取响应头,类似于:
es.onerror = function(e) {
   console.log(e.header.location);
};

这个有可能吗?我错过了什么吗?我认为答案应该很简单,但是我在NodeJs上还比较新。


是的,这是可能的,但首先让我们知道您如何调用“Eventsource”? - Rahil Wazir
@RahilWazir 我不太明白问题的具体内容,在代码中你可以看到我在创建新实例时调用了 EventSource,然后订阅了 onmessageonerror 事件。 - Gepser Hoil
1个回答

5

好的,我已经寻找了几天的解决方案并解决了我的问题。首先,我的代码有误(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;
}

2
Q: "获取有关EventSource错误的信息"。A: "他们不会从服务器发送错误,只会引发一个错误字符串。" - 因此显然永远不会有关于错误的信息。这对于调试来说并不容易。--- 但是请检查您的服务器端错误日志,那可能会给出一些线索。 - Avatar
@Avatar 我们遇到了这个错误。正如您所说,客户端没有关于错误的任何信息。然而,当我们查看服务器端日志时,我们并没有看到任何错误。还有其他的提示吗? - Rylan Schaeffer
然后在代码的不同位置设置error_log()并查看它在哪里停止/中断。然后分析您的代码逻辑。- 还要避免PHP中常见的SSE错误,例如依赖服务器检测用户/浏览器何时离开等。 - Avatar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接