Node Express 无法使用 post 请求设置会话

Jac*_*ang 5 session node.js express express-session

我使用node express 4.0实现了消息码校验功能。我使用会话来存储我发送的味精代码。我像dos所说的那样设置会话中间件?

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')));
Run Code Online (Sandbox Code Playgroud)

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

像下面的这段代码:

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

当我重新发布这个路由器时,我发现它req.session.test是未定义的。

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

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

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

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

end*_*mic 0

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

(在 app.js 中)

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

(在routes/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);
});
Run Code Online (Sandbox Code Playgroud)

(命令行)

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

% curl localhost:3000/get --cookie test.cookie
% {"sessionData":"test"}
Run Code Online (Sandbox Code Playgroud)