NodeJs学习(8)- 使用express-session

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的内容可以参考:

http://nodejs.cn/npm/express-session


你可能感兴趣的:(NodeJs学习(8)- 使用express-session)