请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

redis报错

ReplyError: ERR value is not an integer or out of range
      at parseError (D:\activity\github\node_modules\redis-parser\lib\parser.js:179:16)
      at parseType (D:\activity\github\node_modules\redis-parser\lib\parser.js:303:20)

key* 出来结果 已经保存成功了。网页显示Internal Server Error
cookies没有设置进去;
请问怎么解决?
完整的session-store在这里,更换为老师的就可以了。对比不出问题在哪里。


function  getRedisSessionID( sid ) {
    return `ssid:${sid}`
}
 class RedisSessionStore{

    constructor(client){
        this.client=client;
    }

    /**
     *获取redis存储的数据
     * @param sid {Number}
     * @returns {Promise.<void>}
     */
    async get(sid){
        console.log('get',sid)
        const  id=getRedisSessionID(sid);
        const data=await this.client.get(id);
        if(!data){
            return null;
        }
        try{
            const result=JSON.parse(data);
            return result;
        }catch (err){
            console.log(err)
        }
    }

    /**
     *
     * @param sid
     * @param sess
     * @param ttl {Number} 过期时间,单位-秒
     * @returns {Promise.<void>}
     */
    async set(sid,sess,ttl){
        console.log('setResis',sid,sess,ttl)
        const id=getRedisSessionID(sid)
        if(typeof ttl ==='number'){
            ttl=Math.ceil(ttl/1000);
        }
        try {
            console.log(sess)
            const sessStr=JSON.stringify(sess);
            console.log("sessStr",sessStr)
            if(ttl){
                await this.client.setex(id,ttl,sessStr)
            }else{
                await this.client.set(id,sessStr)
            }
        }catch (err){
            console.log(err)
        }


        await this.client.setex(sid,sess,ttl)
    }
    async destroy(sid){
        console.log('删除',sid)
        const id =getRedisSessionID(sid);
        await this.client.del(id)
    }
}
module.exports=RedisSessionStore;

正在回答 回答被采纳积分+3

2回答

Jokcy 2019-05-13 09:10:56

所以你报错的地方是具体写了什么代码?

0 回复 有任何疑惑可以回复我~
  • 提问者 heZM #1
    session-store里写的是打印到这里报错
    await this.client.setex(id,ttl,sessStr);
    koa-server中, ctx.session.user={age:'28'}来设置的session
    回复 有任何疑惑可以回复我~ 2019-05-13 10:00:14
  • Jokcy 回复 提问者 heZM #2
    你设置的ttl有问题吧?应该要设置数字的。
    回复 有任何疑惑可以回复我~ 2019-05-14 21:50:36
  • 提问者 heZM 回复 Jokcy #3
    经过排查,在set函数中trycatch外多写了一行
     await this.client.setex(sid,sess,ttl);ttl为空时报错
    回复 有任何疑惑可以回复我~ 2019-05-15 16:08:26
提问者 heZM 2019-05-10 16:29:03

"redis-parser": "^3.0.0",

另外尝试node直接调用redis进行存储读取,都是可以的https://img1.sycdn.imooc.com//szimg/5cd5363e0001406009920221.jpg

https://img1.sycdn.imooc.com//szimg/5cd5364c0001810305950169.jpg

0 回复 有任何疑惑可以回复我~

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信