Ich erkunde Server-Sent Events mit Node.js und Express. Ich habe es geschafft, die Anfragenbearbeitung und das Schreiben des Streams einzurichten, aber jetzt habe ich Probleme mit der Sitzungsverwaltung, da ich die Sitzung nicht zwischen aufeinanderfolgenden Aufrufen beibehalten kann.
Server-Code:
var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var app = express();
// log all requests
app.use(function(req, res, next) {
console.log(req.method, req.path);
next();
});
app.use(cookieParser());
app.use(session({
secret : 'pretty hard to guess',
resave : false,
saveUninitialized : true
}));
// serve test file
app.get('/', function(req, res) {
res.sendfile(__dirname + '/sandbox/test.html');
});
app.get('/test/:name', function(req, res) {
console.log(req.headers);
// session is empty
console.log(req.session)
req.session.name = req.param('name');
// session.name is set
console.log(req.session);
req.socket.setTimeout(Infinity);
res.type('text/event-stream');
console.log(res._headers)
res.write('retry: 3000\n');
res.write('data: Hello, SSE!\n\n');
});
var server = app.listen(8080, function() {
console.log('listening on port 8080\n');
});
Kleine Client-App:
function sendReq() {
var name = document.getElementById('name').value;
var es = new EventSource('test/' + name);
es.onopen = function() {
var ul = document.getElementById('board');
var li = document.createElement('li');
li.textContent = 'Connected...';
ul.appendChild(li);
};
es.onmessage = function(e) {
var ul = document.getElementById('board');
var li = document.createElement('li');
li.textContent = e.data;
ul.appendChild(li);
};
return false;
}
Wenn ich auf localhost:8080/
zugreife und einmal meinen Namen sende, sehe ich, dass der Server den Aufruf in der Konsole protokolliert und die Sitzungsdaten und den Cookie setzt.
Wenn ich meinen Namen erneut sende, wird das Sitzungscookie gesetzt, aber die Sitzung ist leer, sodass das Sitzungscookie erneut gesendet wird.
Wie kann ich es schaffen, die Sitzungsdaten zwischen den Aufrufen zu speichern?