Express全系列教程之(九):將session上傳至mysql數據庫

1、簡介

實際引用中,有些公司在不一樣地區會設置不一樣服務器,所以就須要用到nginx以實現負載均衡,這時,將session數據保存至數據庫就成爲了須要面對的問題,咱們以MySQL數據庫爲例,看看他是如何將數據上傳至mysql中的。
在npm上有一個叫作:express-mysql-session的模塊,主要用於將數據上傳至mysql數據庫,如下爲他的實現方式:javascript

var express = require('express');
var app = module.exports = express();
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
 
var options = {
    host: 'localhost',
    port: 3306,
    user: 'session_test',
    password: 'password',
    database: 'session_test'		//數據庫名
};
 
var sessionStore = new MySQLStore(options);
 
app.use(session({
    key: 'session_cookie_name',	//自行設置的簽名
    secret: 'session_cookie_secret',		//密匙
    store: sessionStore,		//存儲管理器
    resave: false,
    saveUninitialized: false
}));

 

session story會在內部建立一個MySQL鏈接池,用於處理數據庫的鏈接。
數據庫鏈接池因爲能夠實現鏈接複用,避免了數據庫鏈接頻繁創建、關閉的開銷。默認狀況下,鏈接池由1個鏈接組成,但可使用connectionlimit選項覆蓋此鏈接。你也能夠設置額外的鏈接池option選項。java

當使用默認選項時,存儲session數據庫的表會被自動建立;mysql

2、經過一個實例說明:

1.首先在數據庫中咱們須要有一個存儲數據的數據庫:nginx

 

2.安裝如下模塊:sql

const express=require("express");
const mysql=require("mysql");
const cors=require("cors");	//處理跨域
const session=require("express-session");
const MySQLStore=require('express-mysql-session')(session);	//鏈接mysql主要模塊

3.鍵入以下代碼便可上傳至mysql數據庫:數據庫

const express=require("express");
const mysql=require("mysql");
const cors=require("cors");
const session=require("express-session");
const MySQLStore=require('express-mysql-session')(session);

var app=express();

// 配置mysql
var options = {
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '123456',		
    database: 'session'
};

var sessionConnection = mysql.createConnection(options);
var sessionStore = new MySQLStore({
    expiration: 10800000,
    createDatabaseTable: true,	//是否建立表
    schema: {
        tableName: 'session_tab',	//表名
        columnNames: {		//列選項
            session_id: 'session_id',
            expires: 'expires',
            data: 'data'
        }
    }
}, sessionConnection);

//配置中間件
app.use(session({
	key: 'aid',
	secret: "keyboard cat",
	store: sessionStore,
	resave: false,
	saveUninitialized: true,
	cookie: ('name', 'value',{	maxAge:  5*60*1000,
								secure: false,
								name: "seName",
								resave: false})
}));

app.use(cors());

app.use('/login',function(req,res){
	//設置session
	req.session.userinfo='張三';
	res.send("登錄成功!");
});

app.use('/loginOut',function(req,res){
	//註銷session
	req.session.destroy(function(err){
		res.send("退出登陸!"+err);
	});
});

app.use('/',function(req,res){
	//獲取session
	if(req.session.userinfo){
		res.send("hello "+req.session.userinfo+",welcome to index");
	}else{
		res.send("未登錄");
	}
});

app.listen(8080);

這時啓動咱們的服務器:express

進入http://localhost:8080/時顯示未登陸:npm

從新鏈接如mysql:跨域

 

 

咱們能夠看到,這時session自動建立了session_tab表,但表上並無相應的名稱,只有配置信息,接下來在瀏覽器中進入login路由:瀏覽器

 

咱們只需重連mysql數據庫,就可看到關於用戶信息也有了:

 

當瀏覽器進入loginOut路由後,會執行req.session.destroy操做,將session銷燬,而數據庫表中的用戶信息也將銷燬:

重連數據庫後:

 

固然你們也可根據本身的實際需求來發揮,這裏不在進行更多闡述。

相關文章
相關標籤/搜索