Express-session变量在加载api后改变

express-session variable is changed after loading api

本文关键字:改变 api 加载 变量 Express-session      更新时间:2023-09-26

我是expressjs的新手,我的问题与express-session有关。

app.js在包的下面。我已经安装了express和express-session。

如果我转到'localhost:3000',在控制台中,request .session.flag的值将改变如下:


One before: undefined
1
两个前:1
2

之后,如果我转到'localhost:3000/three',在控制台中,req.session.flag的值将改变如下:


Three before: 2
3

如果我此时刷新'localhost:3000/three', req.session.flag的值将是2而不是3。


Three before: 2
3

为什么会这样?req.session.flag的值从前一点改为3,为什么在控制台中它从2开始?

,如果我去'localhost:3000', req.session.flag的值也将从2开始,为什么会这样?


One before: 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);

会话没有保存在您的/three端点中。这是因为您没有返回任何响应(甚至没有空响应)。

摘自express-session文档:

Session.save ()

将会话保存回存储中,替换将内容存储在内存中(尽管存储可以做一些事情)否则——参考商店的文档以获得确切的行为)。

此方法将在HTTP响应结束时自动调用会话数据已被更改(尽管可以更改此行为)在中间件构造函数中使用各种选项)。正因为如此,通常不需要调用此方法。

在某些情况下,调用这个方法是有用的例如,WebSockets中的长寿命请求。

由于不调用res.send(或简单地调用res.end),请求最终将超时,并且会话不会被保存。

由于JavaScript回调函数的异步特性,express不能只发送默认响应。您必须始终手动发送一个。