- 安装好所需要的环境
1、express-session
2、body-parser
3、cookie-parser
4、ejs 模板
5、创建MySQL数据库 - 创建工程目录
app.js
var express = require('express');
var app = express();
var path = require('path');
var session = require('express-session');
var bodyparser = require('body-parser');
var login = require('./routes/login');
var status = require('./routes/status');
var logout = require('./routes/logout');
var cookieParser=require("cookie-parser");
// 下面三行设置渲染的引擎模板
app.set('views', path.join(__dirname, 'views')); //设置模板的目录
app.set('view engine', 'html'); // 设置解析模板文件类型:这里为html文件
app.engine('html', require('ejs').__express); // 使用ejs引擎解析html文件中ejs语法
app.use(bodyparser.json()); // 使用bodyparder中间件,
app.use(bodyparser.urlencoded({ extended: false}));
app.use(cookieParser());//这里要加()
// 使用 session 中间件
app.use(session({
secret : 'spflinux', // 对session id 相关的cookie 进行签名
name:'adminapp',
resave : true,
saveUninitialized: false, // 是否保存未初始化的会话
cookie : {
maxAge : 1000 , // 设置 session 的有效时间,单位毫秒
},
}));
// 获取登录页面
app.use('/login',login);
// 判断用户状态
app.use('/',status);
// 退出
app.use('/logout',logout);
app.listen(8000);
db.js
//连接数据库
var mysql = require('mysql');
//创建连接池
var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '********',
database:'test'
});
// 封装数据对象
function Data()
{
// 定义查找成员信息
this.selectid = function(data,callback)
{
var sql="SELECT uid FROM t_user WHERE uname=? AND binary upwd=?";
pool.getConnection(function(conn_err, conn) {
if(conn_err) {
callback(err,null,null);
}
else {
conn.query(sql,data, function(query_err, result) {
if (query_err) {
console.log(" Error: " + query_err.message);
return;
}
conn.release();
// 释放连接池
callback(query_err,result);
});
}
});
}
};
module.exports = Data;
login.js
var express = require('express');
var router = express.Router();
var Data = require("./db.js");
var Session = require('./session');
// 获取登录页面
router.get('/', function(req, res, next) {
res.render('login.html',{msg:""});
});
// 用户登录
router.post('/', function(req, res, next) {
var sedata = new Session();
var data = [
req.body.uname,
req.body.upwd
];
sedata.session(function(session)
{
var face = new Data();
face.selectid(data,function(err,result){
if(result.length>0){
req.session.userName = req.body.uname;
res.redirect('/');
}else{
res.render("login.html",{msg:"用户名或密码有误"});
}
});
});
});
module.exports = router;
logout.js
var express = require('express');
var router = express.Router();
var Data = require("./db.js");
var Session = require('./session');
// 获取登录页面
router.get('/', function(req, res, next) {
var sedata = new Session();
sedata.session(function(session){
req.session.userName = null; // 删除session
res.redirect('login');
});
});
module.exports = router;
session.js
var express = require('express');
var app = express();
var session = require('express-session');
var cookieParser=require("cookie-parser");
app.use(cookieParser());//这里要加()
app.use(session({
secret : 'spflinux', // 对session id 相关的cookie 进行签名
name:'adminapp',
resave : false,
saveUninitialized: false, // 是否保存未初始化的会话
cookie : {
maxAge : 1000 , // 设置 session 的有效时间,单位毫秒
},
}));
function Session() {
// body...
this.session = function(callback)
{
callback(session);
}
}
module.exports = Session;
status.js
var express = require('express');
var router = express.Router();
var Data = require("./db.js");
var Session = require('./session');
// 获取登录页面
router.get('/', function(req, res, next) {
var sedata = new Session();
sedata.session(function(session){
if(req.session.userName){ //判断session 状态,如果有效,则返回主页,否则转到登录页面
res.render('home.html',{username : req.session.userName,msg:"登录成功"});
}
else{
res.redirect('login');
}
});
});
module.exports = router;
home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>用户名:<span><%= username %> </span> <a href="/logout">退出登录</a></div>
</body>
</html>
<script type="text/javascript">
alert("<%= msg%>");
</script>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Title</title>
<style type="text/css">
</style>
</head>
<body >
<form action="/login" method="POST" id="myform" onclick="fomrReset()">
用户名: <input type="text" name="uname"/> <br>
密码: <input type="password" name="upwd"/>
<input type="submit" value="Submit" id="btn_smt" />
</form>
</body>
</html>
<script type="text/javascript">
var sc = " <%= msg%>";
if(sc.length>1)
{
alert(sc);
// js的空字符也算一个字节
}
</script>