5

我使用 node express 4.0 来实现消息代码验证功能。我使用 session 来存储我发送的 msg 代码。我按照dos说的设置了session中间件:</p>

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(cookieParser());
app.use(session({secret:'ssssss'}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/uploads', express.static(path.join(__dirname, 'uploads/temp')));

但是当我使用 post 方法获取 msg 代码时,我发现 session 没有设置成功。

像下面的这段代码:

router.post('/msgCode', function(req, res) {
   req.session.test = 'test';
   // request send msg code api then response
}

当我重新发布此路由器时,我发现req.session.test未定义。

然后我在另一个路由器上试试这个:

router.get('/sendMsgTest', function(req, res) {
    req.session.test = 'test';
    res.json({
        status:0
    })
}

每次我请求sendMsgTest,我都能得到req.session.test。当我请求另一种get方法时,我可以req.session.test成功获得价值。

那么为什么我的 post 方法不起作用?

4

3 回答 3

3

我遇到过同样的问题。我一直在使用fetch请求,默认情况下它不发送 cookie,所以我为 GET 和 POST 请求获得了不同的 cookie id。解决方案是:

fetch(url, {
  credentials: 'same-origin' // or 'include'
});

有关更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials

于 2017-08-28T21:11:32.027 回答
1

您只需尝试 session.save() ,并且在快递 4 中您必须提及 "resave" 、 "saveUninitialized"

var session = require('express-session');
app.use(session({secret: 'keyboard cat', resave: false, saveUninitialized: true,cookie: { path: '/', httpOnly: true, maxAge: 30 * 30000 },rolling: true}));

router.post('/savesession', function (req, res) {
req.session.user = 'user';
req.session.save()
res.json(req.session.user);
});

router.get('/getsession', function (req, res) {
res.json(req.session.user);
});
于 2016-05-24T05:00:27.920 回答
0

你没有提到你是如何调用 POST 路由的。您是否将会话 cookie 与 POST 请求一起发送?另外,POST 方法返回什么类型的响应?

(在 app.js 中)

var session = require('express-session');
app.use(session({
  secret: 'sooper_secret',
  resave: false,
  saveUninitialized: false
}));

(在路线/index.js 中)

router.post('/post', function (req, res) {
    req.session.test = 'test';
    res.json({success: true});
});

router.get('/get', function (req, res) {
    const results = {
        sessionData: req.session.test || 'session data not found'
    };
    res.json(results);
});

(命令行)

% curl -X POST localhost:3000/post --cookie-jar test.cookie
% {"success":true}

% curl localhost:3000/get --cookie test.cookie
% {"sessionData":"test"}
于 2016-05-18T20:06:25.980 回答