我尝试在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的新手。
答案 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;
}