美文网首页前端学习Nodejs饥人谷技术博客
express+mySQL实现简单的登录表单

express+mySQL实现简单的登录表单

作者: 忽如寄 | 来源:发表于2016-09-10 00:46 被阅读1925次

基础知识:

jade模板

nodejs的mysql模块

express

一、准备工作

首先必然需要引入express,必须要用到的path模块,这个用于设置静态文件,mysql模块用于连接mysql数据库,涉及到表单提交,必然要解析请求体,所以要使用body-parse模块

二、前端重构

界面如下:

三、后端工作

引入模块

var express=require("express");
var path=require("path");
var bodyParser=require("body-parser");
var mysql=require("mysql"); 

初始化

var app=express();

基本工作

//设置模板引擎
app.set("view engine","jade");
//设置视图文件夹
app.set("views","./views");
//引入bodyparser中间件
app.use(bodyParser.urlencoded({extened:true}));
//设置静态资源地址
app.use(express.static(path.join(__dirname,"static")));
//连接mysql数据库
var connection=mysql.createConnection({
    host:"localhost",
    user:"huruji",
    password:"xie138108",
    database:"testlogin"
});
connection.connect();

利用jade创建模板

login.jade

doctype
html
    head
        meta(charset="utf-8")
        title login
        link(href="main.css",rel="stylesheet")
    body
        form.loginForm(action="/userlogin" method="post" )
            input.loginInput.loginuser(type="text", name="username" placeholder="用户名")
            input.loginInput(type="password",name="userpassword" placeholder="密码")
            p.loginerr #{loginerrMessage}
            input.submit(type="submit",value="登录")

loginerr.jade

doctype
html
    head
        meta(charset="utf-8")
        title 登录失败
    body
        p 对不起,账号或者密码错误,<span id="goLoginTime" style="color:red";>3</span>秒后返回
        script(src="login.js")

登录验证的核心思想就是利用用户提交的请求体,与数据库中的数据进行比对,账号正确则重定向到用户需要进入的网页,不正确则向用户反馈信息,

我们使用当用户的密码错误时,返回一个新的网页,提示用户错误,当用户的密码与账号正确的时候我们就让他进入我们的首页,这次我们假如我们的首页就是工作室网站首页:

app.route("/login").get(function(req,res){
    res.render("login")
}).post(function(req,res){
    console.log(req.body);
})
app.route("/userlogin").post(function(req,res){
    console.log("aaa");
    console.log(req.body);
    connection.query("SELECT * FROM user WHERE username="+connection.escape(req.body.username),req.body.username,function(err,rows,fields){
        console.log(rows);
        if(err){
            console.log()
            res.render("/loginerr");
            return;
        }else if(rows.length<1){
            res.redirect("/loginerr");
        }
        else if(rows[0].password!==req.body.userpassword){
            res.redirect("/loginerr");
        }else{
            res.redirect("http://ce.sysu.edu.cn/hope");
        }
    })
})
app.route("/loginerr").get(function(req,res){
    res.render("loginerr");
})
app.listen(3000);

当然这种肯定很少网站会用到,更多的应该是利用ajax刷新,告诉用户密码错误,当然还有一些网站是返回一个新的网页,这个网页与原来的登录几乎没有二致,也只是多了一个提示信息而已。我们来实现一下第二个:

app.route("/login").get(function(req,res){
    res.render("login")
}).post(function(req,res){
    console.log(req.body);
})
app.route("/userlogin").post(function(req,res){
    console.log("aaa");
    console.log(req.body);
    connection.query("SELECT * FROM user WHERE username="+connection.escape(req.body.username),req.body.username,function(err,rows,fields){
        console.log(rows);
        if(err){
            console.log()
            res.render("/loginerr");
            return;
        }else if(rows.length<1){
            res.render("login",{"loginerrMessage":"账号或者密码错误!"});
        }
        else if(rows[0].password!==req.body.userpassword){
            res.render("login",{"loginerrMessage":"账号或者密码错误!"});
        }else{
            res.redirect("http://ce.sysu.edu.cn/hope");
        }
    })
})
app.listen(3000);

我们使用的依旧是同一个模板,只不过这次我们传递了一个参数而已,界面上没啥区别,但是链接却改变了,那么如果login路径没有其他的post请求,那么我们干嘛不放在同一个链接里呢

var express=require("express");
var path=require("path");
var bodyParser=require("body-parser");
var mysql=require("mysql"); 
var app=express();

//设置模板引擎
app.set("view engine","jade");
//设置视图文件夹
app.set("views","./views");
//引入bodyparser中间件
app.use(bodyParser.urlencoded({extened:true}));
//设置静态资源地址
app.use(express.static(path.join(__dirname,"static")));
//连接mysql数据库
var connection=mysql.createConnection({
    host:"localhost",
    user:"huruji",
    password:"xie138108",
    database:"testlogin"
});
connection.connect();

app.route("/login").get(function(req,res){
    res.render("login")
}).post(function(req,res){
    console.log("aaa");
    console.log(req.body);
    connection.query("SELECT * FROM user WHERE username="+connection.escape(req.body.username),req.body.username,function(err,rows,fields){
        console.log(rows);
        if(err){
            console.log()
            res.render("login",{"loginerrMessage":"账号或者密码错误!"});
            return;
        }else if(rows.length<1){
            res.render("login",{"loginerrMessage":"账号或者密码错误!"});
        }
        else if(rows[0].password!==req.body.userpassword){
            res.render("login",{"loginerrMessage":"账号或者密码错误!"});
        }else{
            res.redirect("http://ce.sysu.edu.cn/hope");
        }
    })
});
app.listen(3000);

就这样我们完成了一个带有数据库验证的简单的表单,当然我们肯定会将一部分验证的权限交给前端部分,比如,用户是否输入了用户名与密码,用户名与密码是否符合规范等。

相关文章

网友评论

本文标题:express+mySQL实现简单的登录表单

本文链接:https://www.haomeiwen.com/subject/sslyettx.html