我是expressjs的新手,我的问题与快递会有关。
app.js位于package.json下面,我已经安装了express和express-session。
如果我转到'localhost:3000',在控制台中,req.session.flag值会改变如下:
之前的一个:undefined
一个后:1
两个之前:1
两个之后:2
之后,如果我转到'localhost:3000 / three',在控制台中,req.session.flag值会改变如下:
之前的三个:2 三个之后:3
如果我此时刷新'localhost:3000 / three',则req.session.flag的值将为2但不是3.
之前的三个:2 三个之后:3
为什么会这样? req.session.flag的值从前一点改为3,为什么在控制台中它从2开始?
如果我去'localhost:3000',req.session.flag的值也会从2开始,为什么会这样呢?
之前:2 一个后:1 两个之前:1 两个之后:2
谢谢!
var express = require('express');
var session = require("express-session");
var post = require('./routes/post');
var app = express();
var port = 3000;
app.use(session({secret:'fdsadfasdfdsafdsafdsafdsafd', saveUninitialized:false, resave: false}));
app.get('/', function (req, res, next) {
console.log("********************************");
console.log("One before: "+req.session.flag);
req.session.flag = 1;
console.log("One after: "+req.session.flag);
next();
},
function (req, res, next) {
console.log("Two before: "+req.session.flag);
req.session.flag = 2;
console.log("Two after: "+req.session.flag);
var html="<!DOCTYPE html><html><head><title>Hello world</title></head><body ><h1>Hello world</h1></body></html>";
res.send(html);
});
app.get('/three', function (req, res, next) {
console.log("********************************");
console.log("Three before: "+req.session.flag);
req.session.flag = 3;
console.log("Three after: "+req.session.flag);
});
app.listen(port);
答案 0 :(得分:0)
会话未保存在/three
端点中。这是因为你没有发回任何回复(甚至不回复)。
来自express-session
文档:
Session.save()
将会话保存回商店,替换上的内容 将内容存储在内存中(尽管商店可能会做某事 否则 - 请查阅商店的文档以了解具体行为。)
如果是,则在HTTP响应结束时自动调用此方法 会话数据已被更改(尽管可以更改此行为 中间件构造函数中的各种选项)。因为这, 通常不需要调用此方法。
在某些情况下,调用此方法很有用 例如,长期请求或WebSockets。
由于您不打电话给res.send
(或只是res.end
),该请求最终会超时并且会话无法保存。
由于JavaScript与回调的异步性质,express不能发送默认响应。您必须始终手动发送一个。