javascript - 在一个nodejs使用connect v1.8.7实现简单登陆的程序中使用connect-redis模块出现如下问题,求解答?

查看:152
本文介绍了javascript - 在一个nodejs使用connect v1.8.7实现简单登陆的程序中使用connect-redis模块出现如下问题,求解答?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

分为package.json、user.json和server.js三个文件,user.json里面用户名为tobi,密码为ferret。

运行时powershell出现如下错误信息:

util.js:965
    throw new TypeError('The super constructor to "inherits" must not ' +
    ^

TypeError: The super constructor to "inherits" must not be null or undefined
    at Object.exports.inherits (util.js:965:11)
    at module.exports (E:\code\test\node_modules\connect-redis\lib\connect-redis.js:130:8)
    at Object.<anonymous> (E:\code\test\server.js:3:40)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:394:7)

server.js代码如下:

var connect=require('connect'),users=require('./users');

var RedisStore=require('connect-redis')(connect);

var server=connect(
    connect.logger('dev'),
    connect.bodyParser(),
    connect.cookieParser(),
    connect.session({store: new RedisStore, secret:'my app secret'}),
    function(req,res,next){
        if('/'==req.url&&req.session.logged_in){
            res.writeHead(200,{'Content-Type':'text/html'});
            res.end(
                'Wdlcome back, <b>'+req.session.name+'</b>.'+'<a href="/logout">Logout</a>'
                );
        }else{
            next();
        }
    },function(req,res,next){
        if('/'==req.url&&'GET'==req.method){
            res.writeHead(200,{'Content-Type':'text/html'});
            res.end([
                '<form action="/login" method="POST">',
                    '<fieldset>',
                        '<legend>Please log in</legend>',
                        '<p>User:<input type="text" name="user"></p>',
                        '<p>Password:<input type="password" name="password"></p>',
                        '<button>Submit</button>',
                    '</fieldset>',
                '</form>'
            ].join(''));
        }else{
            next();
        }
    },function(req,res,next){
        if('/login'==req.url&&'POST'==req.method){
            res.writeHead(200);
            if(!users[req.body.user]||req.body.password!=users[req.body.user].password){
                res.end('Bad username/password');
            }else{
                req.session.logged_in=true;
                req.session.name=users[req.body.user].name;
                res.end('Authenticated!');
            }
        }else{
            next();
        }
    },function(req,res,next){
        if('/logout'==req.url){
            req.session.logged_in=false;
            res.writeHead(200);
            res.end('Logged out!');
        }else{
            next();
        }
    }
);

server.listen(3000);

如果不使用connect-redis模块持久化session,代码是可以正常运行的,所以问题出在哪里呢,是node版本太新的缘故吗?

解决方案

是什么问题,我不太清楚,不过我在 connect-redis 的文档中找到下面的示例代码……所以,你确定可以用 connect 作为参数,而不是 session?

var session = require('express-session');
var RedisStore = require('connect-redis')(session);

app.use(session({
    store: new RedisStore(options),
    secret: 'keyboard cat'
}));

这篇关于javascript - 在一个nodejs使用connect v1.8.7实现简单登陆的程序中使用connect-redis模块出现如下问题,求解答?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆