session保存至mongodb
要素
1. mongodb
2. node
使用api
1.mongoose
2.connect-mongo
首先安装mongodb
下载地址 https://www.mongodb.org/
下载并安装完成后,
1.在C盘上新建这样一个路径C:\data\db
2.打开cmd
3.运行mongod
//看到这样的画面表示mongodb已经成功运行,保持这个cmd,不要关掉
//注意! 如果mongodb异常关闭的时候,再次运行mongod命令会报错,这时候需要到C:\data\db 下面把 mongod.lock文件删除
安装nodejs
下载地址 http://nodejs.org/
下载完成后正常安装,安装完成后系统环境变量里面就会自动添加node和npm
使用webStorm新建一个项目工程,file->new project->node.js Express App
// 这是偷懒的方法 新手可以一步步看其他教程新建一个node express的工程
使用npm下载connect-mongo
可以使用webStorm的Terminal 或者 用cmd找到项目目录 运行
npm install connect-mongo
//如果下载太慢,可以使用淘宝镜像cnpm 方法自己百度
用同样的方法下载mongoose和express-session
npm install mongoose
修改app.js
1.添加 connect-mongo 和mongoose
var mongoose = require("mongoose");
var mongoStore = require("connect-mongo")(session);
2.连接mongodb
mongoose.connect("mongodb://localhost/test");
var db = mongoose.connection;
db.on("error",console.error.bind(console, 'connection error:'));
db.once("open",function(cb){
console.log("connect mongodb success!")
});
3.调用mongoStore
var store = new mongoStore({
mongooseConnection:db,
ttl:7*24*60*60
});
app.use(session({ resave: true,
saveUninitialized: true,
secret: 'uwotm8',
store:store
}));
修改完成后的app.js
var http = require('http');
var express = require('express');
var routes = require('./routes');
var user = require('./routes/users');
var path = require('path');
var mongoose = require("mongoose");
var favicon = require('serve-favicon');
var logger = require('morgan');
var methodOverride = require('method-override');
var session = require('express-session');
var bodyParser = require('body-parser');
var multer = require('multer');
var errorHandler = require('errorhandler');
var mongoStore = require("connect-mongo")(session);
var app = express();
mongoose.connect("mongodb://localhost/test");
var db = mongoose.connection;
db.on("error",console.error.bind(console, 'connection error:'));
db.once("open",function(cb){
console.log("connect success!")
});
var store = new mongoStore({
mongooseConnection:db,
ttl:7*24*60*60
});
// 适用开发和生产环境
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(methodOverride());
app.use(session({ resave: true,
saveUninitialized: true,
secret: 'uwotm8',
store:store
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer());
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', routes.index);
app.post("/session",routes.session);
//app.get('/users', user.list);
// 错误处理中间件应当在路由加载之后才能加载
if ('development' == app.get('env')) {
app.use(errorHandler());
}
var server = http.createServer(app);
server.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
修改index.js
exports.index = function(req,res){
res.render("index",{session:req.session.name})
};
exports.session = function(req,res){
console.log(req.body);
req.session.name = req.body.name;
res.redirect("/")
};
修改index.jade
extends layout
block content
if session
h1= session
form(action="/session" method="post")
input(type="text" name="name")
button(type="submit") 提交
运行
node app.js
打开localhost:3000
输入任意字符点击提交
//这里我输入hello world
会看到这样界面
查看mongodb,看到有一个sessions的数组文件,
里面有相关的session信息
关于session的销毁这里就先不多说了,调用
req.session.destroy()
即可
//这个演示用的node是0.12.2,express 4.8 ,mongodb 3.0