node.js的session使用非常的重要,例如我们在登录的时候,可能需要将用户的数据存入到session中,方便读取。这里简单的介绍如何将数据存入到session中。
在使用node.js的session之前,需要导入express-session模块和sessionstore模块,执行如下命令:
npm install express-session && npm install sessionstore
当模块安装完毕之后,在index.ejs界面添加一个用户登录的模块,index.ejs内容如下:
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1> <form method="post" action="/login"> name:<input type="text" name="userName" id="userName"><br /> pwd: <input type="text" name="userPwd" id="userPwd"><br /> <input type="submit"> </form> </body> </html>
这里定义了一个用户登录提交的表单,模拟用户登录的情景。
然后修改app.js页面,app.js内容如下:
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); //***********use session******************* var session = require('express-session'); var sessionstore = require('sessionstore'); //***************************************** var routes = require('./routes/index'); var users = require('./routes/users'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); // uncomment after placing your favicon in /public //app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users); //***********use session********* app.use(session({ secret:'andy', //session保存时间,单位 : 秒 cookie:{maxAge: 900000}, resave: false, saveUninitialized: true, store: sessionstore.createSessionStore() })); app.post('/login', function(req, res){ //定义user对象存储页面提交的数据 var user = { name : req.body.userName, password : req.body.userPwd }; //将user对象存入到session中,在success.ejs页面显示相关信息 req.session.user = user; res.render('success.ejs', {user: req.session.user}); }); //test.ejs页面将显示session中user对象的信息 app.post('/test', function(req, res){ res.render('test.ejs', {user: req.session.user}); }); //******************************* // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); app.listen(8000, '127.0.0.1', function(err){ console.log(new Date() + 'server start on port: 8000 !'); }); module.exports = app;
然后定义success.ejs页面用于显示user对象的信息。success.ejs页面内容如下:
<!DOCTYPE html> <html> <head> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= user.name %></h1> <h1><%= user.password %></h1> <form method="post" action="/test"> <input type="submit"> </form> </body> </html>
当然还有test.ejs页面,test.ejs页面内容如下:
<!DOCTYPE html> <html> <head> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= user.name %></h1> <h1><%= user.password %></h1> </form> </body> </html>
执行node app.js命令,启动服务,模拟登录。
要清空session的话,可以这样 : req.session.user = null;
更多关于express-session的内容可以参考: