node.js - 在 ExpressJS 中打印 session 对象

标签 node.js express node-redis

我正在尝试在 ExpressJS 框架的中间件中打印 session 对象。我是 Express session 的新手,想查看对象是否保存到我在 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 文件

最佳答案

在我的例子中,代码有效:

console.log(req.session);

还可以使用它来参加一些 session 信息,使用它:

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

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

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

关于node.js - 在 ExpressJS 中打印 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50071622/

相关文章:

node.js - Socket.io由于nsp无法连接

html - 需要获取HTML5 <video> s和<audio> s的视频标题

node.js - Redis 连接从关闭事件中消失

node.js - Redis -nodejs 简单程序 -ERROR

php - Inotify 可以处理大量目录吗?

node.js - 如何用 gulp 看符号链接(symbolic link)?

express - 如何使用 SSL 但从 LAN 上的另一台计算机访问自签名网络服务器?

rest - 如何使用 Sequelize 查询构建 .json 端点?

javascript - javascript对象没有内置函数hasOwnProperty

node.js - 如何在 Redis 上命名空间键以避免名称冲突?