我正在使用MEAN技术栈,并尝试从服务器端接收事件。为此,我使用了EventSource,但它似乎无法正常工作。
我可以看到连接已打开,但是没有从服务器获取任何消息。我可以在Node控制台中看到消息被发送,但在客户端(浏览器控制台)中却没有任何消息。
我有点迷失方向,因为我遵循了所有我找到的教程,但使用完全相同的代码时它就无法正常工作。
这是我在客户端中使用的AngularJS代码:
我可以看到连接已打开,但是没有从服务器获取任何消息。我可以在Node控制台中看到消息被发送,但在客户端(浏览器控制台)中却没有任何消息。
我有点迷失方向,因为我遵循了所有我找到的教程,但使用完全相同的代码时它就无法正常工作。
这是我在客户端中使用的AngularJS代码:
var source = new EventSource('/api/payments/listen');
source.addEventListener('open', function(e) {
console.log('CONNECTION ESTABLISHED');
}, false);
source.addEventListener('message', function (e) {
$scope.$apply(function () {
console.log('NOTIFICATION');
console.log(e.data);
});
}, false);
source.onmessage = function (e) {
console.log('NOTIFICATION!');
console.log(e);
};
source.addEventListener('error', function(e) {
if (e.readyState === EventSource.CLOSED) {
console.log('CONNECTION CLOSED');
}
}, false);
服务器端代码:
exports.listen = function (req, res) {
if (req.headers.accept && req.headers.accept === 'text/event-stream') {
if ( req.url === '/api/payments/listen' ) {
sendSSE(req, res);
}
else {
res.writeHead(404);
res.end();
}
}
else
res.end();
};
function sendSSE(req, res) {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
var id = (new Date()).toLocaleTimeString();
// Sends a SSE every 5 seconds on a single connection.
setInterval(function() {
constructSSE(res, id, data);
}, 5000);
constructSSE(res, id, data);
}
function constructSSE(res, id, data) {
res.write('id: ' + id + '\n');
res.write('data: ' + JSON.stringify(data) + '\n\n');
}
有什么建议?有什么提示吗?
编辑
我不知道是什么原因导致了问题,但是我已经使用了Simple-SSE,这是一个非常有用的小型服务器端事件库,现在它已经按照预期工作。
以下是想要尝试的人的链接: https://github.com/Lesterpig/simple-sse
谢谢 =)