前端:html语言
后端:nodejs–express框架
数据库:mongodb
–只限于在本地数据库使用–
第一步–在用下面代码之前,请配置好相关环境
关于代码中所用到的Mongodb操作的模块,请移步到本人另一篇博客. 【自己封装的mongodb操作的模块】
第二步–在nodejs目录创建一个*.js文件
代码如下:
var express = require("express"); //引入express模块,使用express框架,处理http请求
var app = express(); //创建实例对象,才能调用框架的方法
app.use(express.static('public')); //调用public文件夹(一般public文件夹存放一些img,css,js等前端所需的代码文件)
app.set("views engine", 'ejs'); //前端文件渲染
app.set('views', __dirname + '/views'); //设置前端文件地址:是在当前文件的views目录下
var crypto = require('crypto'); //引入crypto模块,主要是对用户的密码进行加密处理
var bodyParser = require('body-parser'); //中间件,用于解析post发送的数据
var urlencodedParser = bodyParser.urlencoded({extended: false}) //解析form表单发送过来的urlencoded
var mongodbModel = require('./mongodbModel'); //调用封装好的Mongodb数据库模块
var mongodb = new mongodbModel('user','userInfo'); //设置database以及数据表
mongodb.init(); //进行连接和初始化
var session = require('express-session'); //引入session模块
var cookieParser = require('cookie-parser');//引入cookie模块
app.use(cookieParser());
app.use(session({ //设置session
secret: '12345', //设置秘钥
name: 'String_req.body.name', //这里的name值得是cookie的name,默认cookie的name是:connect.sid(限本地数据库使用)
cookie: {maxAge: 80000 }, //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
}));
//个人建议理解为定义方法,当网址为localhost:8000时,调用这个方法,实现的是返回views下的index2文件,是首页
app.get("/", function(req, res) {
res.render('index2', {'message':'首页'});
});
//当网址为localhost:8000/register2时,调用这个方法,实现的是返回views下的register2文件,是注册页面
app.get('/register2',function(req,res){
res.render('register2',{'message':'注册'})
})
//当网址为localhost:8000/login2时,调用这个方法,实现的是返回views下的login2文件,是登陆页面
app.get('/login2',function(req,res){
res.render('login2',{'message':'登陆'})
})
//点击注册,网址变为localhost:8000/login2,将注册信息发送并使用了下面这个方法。
app.post('/login2',urlencodedParser,function(req,res){
var passwd =req.body.passwd; //定义passwd变量的值为输入框name=passwd的值
var md5 = crypto.createHash('md5'); //使用crypto的方法对密码进行加密
var en_data = md5.update(passwd).digest('hex'); //定义en_data变量的值为加密后的值
//使用封装的模块的insert方法,对用户的注册信息进行存储到数据库
mongodb.insert({'name':req.body.name,'passwd':en_data},function(err,data){
if(err){
console.log('[INSERT ERROR] - ',err.message);
res.render('register2',{'message':'注册'}) //如果注册失败,跳转到views下的register2页面;
}else{
res.render('login2',{'message':'登陆'}) //如果注册成功,跳转到views下的login2登陆界面
}
});
})
//这里是登陆成功才能显示的界面,是笔者为了验证session是否有效才写的
//网址为localhost:8888/pay时,如果有req.session.sign,则成功进入views下的pay界面,如果并没有登陆过,则没有req.session.sign的值,那么跳转到登陆页面
app.get('/pay',function(req,res){
if(req.session.sign){
console.log(req.session);
res.render('pay',{'message':'pay'});
}else {
res.render('login2',{'message':'登录'});
}
})
//这是登陆成功才会进行的方法
//点击登陆,网址变为localhost:8888/index2,并且判断,如果输入的账号和密码不匹配,则跳转到登陆界面,如果匹配,则判断是否有session信息,没有的话,表明第一次登陆,则成功跳转并进行session值的存储,如果有session值,则再次更新session,并进行跳转
app.post('/index2',urlencodedParser,function(req,res){
var passwd =req.body.passwd; //同样对登陆页面的密码输入框进行加密
var md5 = crypto.createHash('md5');
var en_data = md5.update(passwd).digest('hex');
mongodb.find({'name':req.body.name},function(err,data){ //封装模块的查询方法,查询到对应数据的信息
if(err){
console.log('[INSERT ERROR] - ',err.message);
res.render('login2',{'message':'登陆'})
}else{
// console.log(data[0].passwd);
if(data[0].passwd==en_data){ //判断数据库的密码信息是否和输入框的密码匹配
if (req.session.sign) { //判断是否有缓存;如果有,直接跳转
res.render('pay',{'message':'pay'});
}else {
req.session.sign = true; //如果没有,则保存一个缓存信息
req.session.name = req.body.name;
res.render('pay',{'message':'pay'});
}
}else{
res.render('login2',{message:'密码或者账号错误'}) //如果密码错误,则返回login2登陆页面
}
}
});
})
var server = app.listen(8888); //请求网址的端口号
第三步–在同目录创建views文件夹,并且在文件夹中创建regisger2.html文件,写好代码后改后缀为.ejs,即register2.ejs和login2.html文件,写好代码后改后缀为.ejs,即login2.ejs
[图片看不清请Ctrl+滑轮缩放页面]