$npm install express-session --save-dev然后在app.js中引用:
var session = require('express-session')app.use(session({
secret: 'wenzi', // 建议使用 128 个字符的随机字符串
cookie: { maxAge: 60*60*1000 }, // 设置时间
resave : false,
saveUninitialized : true
}));
设置完成后,就可以使用session保存数据了。以登录成功后保存数据为例:
user_m.login(username, password_hash, function(result){
if(result.length){
// 将数据保存到名为user的session中
req.session.user = {
uid : result[0].id,
username : username
}
res.redirect('/');
}else{
// console.log('登录失败');
res.render('login', {errmsg:'用户名或密码错误'});
}
});还有一个问题:如何把session中的数据传递给模板呢,比如没有登录时,显示“注册,登录”连接,登录后显示“用户名,登录”信息。
在app.js中添加:
app.use(function(req, res, next){
// 如果session中存在,则说明已经登录
if( req.session.user ){
res.locals.user = {
uid : req.session.user.uid,
username : req.session.user.username
}
}else{
res.locals.user = {};
}
next();
})然后在模板中就可以使用user变量了:
<% if(user.uid){ %>
<!-- 登录状态下 --><% }else{ %>
<!-- 非登录状态下 -->
<% } %>
四、首页及详情页
我们在首页能够展示主题列表并能发表主题,点击链接进入详情页后能该主题进行回复。当然发表主题和对主题进行回复都是在已经登录的状态进行的。
4.1 首页
在models目录创建list.js,从数据库中获取主题列表:
// models/list.jsvar pool = require('./db');
module.exports = {
// 获取首页的主题
getIndexList : function(cb){
pool.getConnection(function(err, connection){
if(err) throw err;
// 连表查询,获取到作者的用户名
connection.query('SELECT `list`.*, username FROM `list`, `user` WHERE `list`.`uid`=`user`.`id`', function(err, result){
if(err) throw err;
cb(result);
connection.release();
// 接下来connection已经无法使用,它已经被返回到连接池中
})
});
}
}
在routes中的index.js中调用getIndexList获取数据,并调用index.ejs模板:
// routes/index.jsvar list_m = require('../models/list');
router.get('/', function(req, res, next) {









