加载api后更改express-session变量

时间:2016-10-05 19:59:32

标签: javascript node.js session express express-session

我是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);

1 个答案:

答案 0 :(得分:0)

会话未保存在/three端点中。这是因为你没有发回任何回复(甚至不回复)。

来自express-session文档:

  

Session.save()

     

将会话保存回商店,替换上的内容   将内容存储在内存中(尽管商店可能会做某事   否则 - 请查阅商店的文档以了解具体行为。)

     

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

     

在某些情况下,调用此方法很有用   例如,长期请求或WebSockets。

由于您不打电话给res.send(或只是res.end),该请求最终会超时并且会话无法保存。

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