0
我正在使用Node.js和Express瀏覽服務器發送的事件。 我設法設置請求處理和寫入流,但現在我正在努力處理會話管理,因爲我無法在後續調用之間保持會話持續。快速 - 會話不會在後續的SSE請求之間保存
Server代碼:
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');
});
微型客戶端應用程序:
<!DOCTYPE html>
<html>
<head>
<script>
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;
}
</script>
</head>
<body>
<form id=sse-form onsubmit="return sendReq();">
<input id=name />
<input type=submit />
<ul id=board></ul>
</form>
</body>
</html>
當訪問localhost:8080/
一次送我的名字,我可以看到服務器日誌呼叫的控制檯和設置會話數據和cookie。
如果我再次發送我的名字,會話cookie被設置,但會話爲空,所以會話cookie被重新發送。
我該如何設法在呼叫之間存儲會話數據?
我已經嘗試將'resave'更改爲'true',但無濟於事......這不能解決問題,不幸的是。不管怎麼說,還是要謝謝你! –