首页 > 解决方案 > 保存和检索 req.session 的内容

问题描述

我已经搜索了其他问题,但似乎没有一个对我有帮助。我正在尝试使用 express-session 模块将搜索参数保存在 angularJs 的表中。当用户登录时,我已经在会话中保存了一些信息(并且工作正常)。但是当我尝试对过滤器做同样的事情时,它不起作用

这就是我使用的

在 server.js 中

var session = require('express-session');
var passport = require('passport');
var app = express();

app.use(session({ 
   secret: 'secret' ,
   saveUninitialized: true,
   resave: true, 
})); 

在 AngularJs 中,我调用该函数来设置和检索会话数据

检索数据

$http.get(apihost + '/customSessionFilters/getSessionFilters')
   .success(function (getCurrentFilters) {

       if(getCurrentFilters.status == 'filters') {
           console.log(getCurrentFilters);
       }
       else {
           console.log('no filters');
       }
   })
   .error(function (err) {
       Notification.error(err.message);
   });

设置数据

var filters = angular.toJson($scope.searchParams);
$http.post(apihost + '/customSessionFilters/setSessionFilters/' + filters)
 .success(function (setCurrentFilters) {
    console.log(setCurrentFilters);
    })
     .error(function (err) {
         Notification.error(err.message);
    });

然后是nodejs中的2个函数

设置数据

var express = require('express');
var router = express.Router();
var session = require('express-session');

router.post('/setSessionFilters/:paramsFilter',function(req,res,next) {

    var filters = JSON.parse(req.params.paramsFilter);

    req.session.customSessionFilters = filters;

    console.log('PROVA NUOVO SERVICE -> setSessionFilters');
    console.log(req.session);

    res.json({status: 'ok', data: req.session.customSessionFilters});
});

并检索数据

router.get('/getSessionFilters',function(req,res,next) {

    console.log('***********');
    console.log(req.session);

    if(req.session.customSessionFilters) {
        console.log('PROVA NUOVO SERVICE -> getSessionFilters');
        console.log(req.session.customSessionFilters);

        res.json({status: 'filters', data: req.session.customSessionFilters});
    }
    else {
        console.log('PROVA NUOVO SERVICE -> no filters');

        res.json({status: 'no_filters'});
    }
});

我希望找到 req.session.customSessionFilters 来填充我在表格中的搜索表单中设置的参数。我知道数据被传递给“设置会话数据”,因为我可以在 console.log 中看到它们,但是当我到达“获取会话数据”时,它们就消失了。有什么帮助吗?

编辑: router.post(customSessionFilters/setSessionFilters) 的输出(UserMaintenanceCenterCode 和dealerList 是我已经在登录中放入会话的变量;customSessionFilters 是我在函数中添加的)

Session {
    cookie:
    { path: '/',
        _expires: null,
        originalMaxAge: null,
        httpOnly: true },
    passport: { user: 90 },
    UserMaintenanceCenterCode: [ 1 ],
    dealerList: [ 13 ],
    customSessionFilters: { year: 2018, Code: 'CC010', Dealer: 13 } 
}

router.get(customSessionFilters/getSessionFilters) 的输出是相同的,但没有 customSessionFilters。

$http.post(apihost + '/customSessionFilters/setSessionFilters') 的输出没有显示,但它只会在连接的函数中打印 customSessionFilters。

$http.get(apihost + '/customSessionFilters/getSessionFilters') 的输出总是打印“no_filters”(未定义 customSessionFilters 时函数的响应)

标签: node.jsexpressexpress-session

解决方案


推荐阅读