文件夹结构:
数据库结构:
html结构:
<form action="/login.do" method="post">
用户名:<input name="userName" type="text">
密 码:<input name="pwd" type="password">
<button>提交</button>
</form>
<h1>注册</h1>
<form action="/register.do" method="post">
用户名:<input name="userName" type="text">
密 码:<input name="pwd" type="password">
<button>提交</button>
</form>
1.配置服务器入口文件
// A.下载express模块:npm install express@4 -s
const myexpress=require("express");
// B.下载morgan模块:npm install morgan -s
const logger=require("morgan");
// C.下载解析post值的模块:npm install body-parser -s
const bodyParser=require("body-parser");
// 下载小图标模块:npm install serve-favicon -s
const favicon=require("serve-favicon")
const route=require("./routers/indexRouter")
//D.创建服务器
const myapp=myexpress();
//配置服务器
// 1.打印日志
myapp.use(logger("dev"));
// 2.解析post方法
myapp.use(bodyParser.urlencoded({extended:false}));//配置post的body模块
myapp.use(bodyParser.json())//将数据转换成json
// 3.使用路由,分发任务
myapp.use(route);//进入路由文件夹
// 4.配置静态资源
myapp.use(myexpress.static(__dirname+"/src"))//拦截请求
// 5.配置网页小icon
myapp.use(favicon(__dirname+"/src/images/logo.jpg"))
//当发生404页面错误的时候返回一个404文件
myapp.use(function (req,resp) {
resp.status(404);
resp.redirect("/page/404.html")//重定向
})
// E.侦听
myapp.listen("8888",()=>{
console.log("day3-express服务器启动")
})
2.配置路由文件
//使用提供的路由模块
const express=require("express");
const router=express.Router();//创建路由模块
const userCtrl=require("../controller/userCtrl")
//拦截请求
// router.get("/login.do",userCtrl.userLogin)//默认将req,resp传给函数userLogin
router.post("/login.do",userCtrl.userLogin)//拦截登录请求
router.post("/register.do",userCtrl.registerUser)//拦截注册请求
module.exports=router;//公开路由对象
3.配置控制文件
const dbDao=require("../dao/userDao")
//控制所有用户相关的东西
module.exports={
userLogin(req,resp) {
//get方法
/* let userName=req.query.userName;//userName是表单中用户名的name属性值
let pwd=req.query.pwd;//pwd是表单中密码的name属性值*/
//post方法
let userName=req.body.userName;
let pwd=req.body.pwd;
let loginArr=[userName,pwd];
dbDao.selectUser(loginArr,function (err,data) {//err:获取数据操作的错误信息
if(data.length>0){
resp.redirect("/page/nav.html")//重定向
}else{
resp.redirect("/index.html")//重定向
}
})
},
registerUser(req,resp){
let username=req.body.userName;
let pwd=req.body.pwd;
let regisArr=[username,pwd];
//调用数据持久层,只操作数据
dbDao.addUser(regisArr,function (err,data) {//err:获取数据操作的错误信息
if(data){
resp.send("注册成功")
}else{
resp.send("注册失败")
}
})
}
}
4.数据库操作方法
//对数据库进行操作
const myPool=require("../config/mysqlpool")
module.exports={
//查询数据操作
selectUser(arr,cb){
//使用数据库连接池来查询数据
myPool.connect("SELECT s_name FROM students WHERE s_name=? AND s_pwd=?",arr,function (err,data) {//使用问号+数组的方式,能够防止sql注入
cb(err,data)
})
},
//增加数据操作
addUser(arr,cb){
//使用数据库连接池来添加数据
myPool.connect("insert into students values(null,?,?)",arr,function (err,data) {//使用问号+数组的方式,能够防止sql注入
cb(err,data)
})
}
}
5.连接数据库,进行相应的数据库操作,返回对应信息
//连接数据库,下载node-mysql模块:npm install mysql -s
const mysql=require("mysql");
const poolCig={
host:"localhost",//ip地址
port:"3306",//端口号
user:"root",//用户名
password:null,//密码
database:"mylogin"//数据库名
}
const dbPool={
pool:{},
create(){
// 1.创建数据库连接池
this.pool=mysql.createPool(poolCig)
},
connect(sql,arr,fun){
// 2.通过连接池对象发起连接
this.pool.getConnection(function (err,connection) {//err:获取连接对象的错误信息
// 3.操作数据库
connection.query(sql,arr,fun)
connection.release();//关闭连接
})
}
}
dbPool.create()
module.exports=dbPool