在ExpressJS中打印会话对象

时间:2018-04-28 00:07:36

标签: node.js express node-redis

我正在尝试在ExpressJS框架的中间件中打印出会话对象。我是使用express的会话新手,想看看对象是否保存到我在app.js文件中配置的Redis

[index.js (router)]
    router.use('/', function(req, res, next) {
        req.session.user = {};
        req.session.user.browserInformation = req.headers['user-agent'];
        console.log(req.session);
        next();
    });
    router.get('/', function(req, res, next) {
        res.render('index.html');
    });



[The app.js File:]
   'use strict';
    const createError = require('http-errors');
    const express = require('express');
    const path = require('path');
    const cookieParser = require('cookie-parser');
    const logger = require('morgan');
    const bodyParser = require('body-parser');
    const session = require('express-session');
    const redis = require('redis');
    const redisStore = require('connect-redis')(session);
    const client = redis.createClient();

    const app = express();

    const _Utils = require('./application/_Utils');

    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');

    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({
        extended: false
    }));
    app.use(cookieParser());
    app.use(bodyParser.urlencoded({
        extended: false
    }))
    app.use(bodyParser.json())
    app.use(express.static(path.join(__dirname, 'views')));

    //require('./config/router')(app);
    let indexRouter = require('./routes/index');

    app.engine('html', require('ejs').renderFile)

    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
        next(createError(404));
    });

    // error handler
    app.use(function(err, req, res, next) {
        // set locals, only providing error in development
        res.locals.message = err.message;
        res.locals.error = req.app.get('env') === 'development' ? err : {};

        // render the error page
        res.status(err.status || 500);
        res.render('error');
    });

    app.use(session({
        secret: _Utils.getHashedValue(),
        store: new redisStore({
            host: '127.0.0.1',
            port: 6379,
            client: client,
            ttl: 3600000
        }),
        saveUninitialized: false,
        resave: false,
        cookie: {
            expires: new Date(Date.now() + 3600000),
            maxAge: 3600000
        },
    }));
    module.exports = app;

我遇到的一个问题是,当我在终端客户端界面中执行KEYES *命令时,没有任何内容正在打印或Redis为空

编辑:添加了整个app.js文件

1 个答案:

答案 0 :(得分:1)

在我的案例代码中有效:

console.log(req.session);

也可以使用此参加会话的一些信息使用此:

 req.session.mail="a@b.com";

如果您在localhost中,请在我们的代码中添加此不安全的cookie选项。例如:

app.use(session({ secret: 'GttiginYagmurlagelkuskunumyagmuralara' ,resave: true,
    saveUninitialized: true,
    cookie: { secure: false,maxAge:  3600000}}));