今天打算学习一个express中cookie和session的用法。自己实现了一个小例子,碰到的问题,记录一下。
http://www.it165.net/pro/html/201405/13965.html
1、mongoose连接数据库:
可以自己指定数据库,如果不存在的话,会自动创建一个(不过有点慢);
数据库中collection是项目名+s:exports.Demo = mongoose.model('cs', demoSchema);集合名为cs,一般会加s,同一个项目可以指定不同的集合名,对应不同的new Schema;mongoose.connect('mongodb://localhost/blog');数据库名为blog。
router中不要忘了mongoose.connect('mongodb://localhost/cs'); 只需要添加一次。否则会提示unclosed connection。
2、例子主要是登陆,注册和退出。涉及到了cookie和session,有时候需要给res.locals赋值。mongoose的方法也不太熟悉。总算是跑通了,改天再看一下。
功能 | 路径 | 路由 | view |
首页 | / | header.ejs | |
注册 | /reg | reg.js | reg.ejs |
登陆 | /login | login.js | login.ejs |
退出 | /logout | logout.js |
今天又看了一遍:对于不太了解的东西,记录一下:
1、reg.js中:给res.locals赋了两个属性,可以再前端页面使用,在视图渲染之前有效,所以network中看不到。
2、由于我加了cookie-parser和express-session,所以有res.cookie()和req.session。
login.js中:res.cookie('islogin', name, { maxAge: 60000 });
res.locals.username = name;
req.session.username = res.locals.username;
/中:req.session.username = req.cookies.islogin;
res.locals.username = req.session.username;
3、logout.js中:req.session.destroy();
还是不太理解为什么要做这些。
找了一篇介绍:http://www.shaoqun.com/a/98386.aspx(EXPRESS 4.x 以上使用session和cookie 的记录)
与之前不同的地方是,没有用express-session,是基于connect实现的session。
app.js需要添加的代码:
app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(connect.session({ secret: 'lgphp', key: 'lgphp' ,cookie: { maxAge: 20000}})); //session 时长为20秒,这个是以毫秒为单位,这样我们就建立一个session的会话,这是一个全局的设置 routes(app);
session部分:
设置:req.session.sessname = 'i am a sesion';
获取:res.send('session:' + req.session.sessname);
删除: req.session.destroy();
判断session是否存在:if (req.session){}
cookie部分:
设置:res.cookie('cookiename','i am a cookie',{ maxAge: 20000,httpOnly:true, path:'/'});//cooike 时长 30 sec
获取:var c = req.cookies.cookiename //这是个字典对象,你可以用括号的方式获得
删除:res.cookie('cookiename','null',{maxAge:0});
判断cookie是否存在:if ('undefined' === (typeof req.cookies.cookiename))