我正在使用 Node.js 和 Express 探索服务器发送的事件。 我设法设置请求处理和流写入,但现在我在 session 管理方面遇到困难,因为我无法在后续调用之间保留 session 。
服务器代码:
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/
并发送我的名字一次时,我可以看到服务器在控制台上记录调用并设置 session 数据和cookie。
如果我再次发送我的名字,则会设置 session cookie,但 session 为空,因此会再次发送 session cookie。
如何在调用之间存储 session 数据?
最佳答案
resave
句柄告诉 session 保存您的 cookie 值。否则,您必须根据每个请求手动重新设置它们。
app.use(session({
secret : 'pretty hard to guess',
resave : true, <-----
saveUninitialized : true
}));
引自文档https://github.com/expressjs/session :
resave - forces session to be saved even when unmodified. (default: true)
关于javascript - Express - 在后续 SSE 请求之间不会保存 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628006/