作者使用express-session时出现错误expires字段未定义,检查源码发现此是插件下store.js文件下的87行出问题,
检测得到sess为字符串类型,所以作者将sess转为json对象了,在87行处添加sess=JSON.parse(sess);即可。
Store.prototype.createSession=function(req,sess){
sess=JSON.parse(sess);
var expires=sess.cookie.expires
,orig=sess.cookie.originalMaxAge;
sess.cookie=newCookie(sess.cookie);
if('string'==typeofexpires)sess.cookie.expires=newDate(expires);
sess.cookie.originalMaxAge=orig;
req.session=newSession(req,sess);
returnreq.session;
};
有出现同样错误的朋友可以试一试。
作者所有express-session版本号为1.15.6
附上使用express-session的后端代码,供学习。
const express=require('express');
const expressSession=require('express-session');
const session=require('connect-session');
const mysql=require('mysql');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
var MySQLStore =require('connect-mysql')(expressSession);
//连接数据库,保持连接
const pool=mysql.createPool({
connectionLimit : 300, //连接池最多可以创建连接数
host:'localhost',
user:'root',
password:'123456',
database:'test',
queueLimit:8 // 队伍中等待连接的最大数量,0为不限制。
});
var options={
pool:pool
};
//创建服务器
const server=express();
server.listen(8888,(err)=>{
if(err)
throw new err;
else
console.log('成功监听8888端口。');
});
//cookie、session
server.use(cookieParser('fsafgs4324rfrt34edfg5'));//签名
var sessionArr=[];
for(var i=0;i<10000;i++)
sessionArr.push('key_'+Math.random().toString().replace('.',''));
server.use(expressSession({
secret:'fsafgs4324rfrt34edfg5',
name:'my_session_id',
cookie:{maxAge:24*3600*1000},
resave: false,
saveUninitialized: true,
keys:sessionArr,
store: new MySQLStore(options),
}));//24小时
setInterval(function(){
pool.getConnection((err,connect)=>{
if(err){
console.log(err);
throw err;
}else{
var sql=`DELETE from sessions WHERE expires>0 AND expires<UNIX_TIMESTAMP()`;
connect.query(sql,(err)=>{
connect.release();
if(err){
console.log(err);
throw err;
}
});
}
});
},180*000); //每半个小时检查过期的session并删除
server.post('/session',(req,res)=>{
req.session['time']=new Date().toString();
res.send(req.session['time']);
});
server.post('/session2',(req,res)=>{
console.log(req.session['time'])
res.send(req.session['time']);
});
//静态文件放置位置,即根目录
server.use(express.static('./www'));
网友评论