当前位置:   article > 正文

node+express+mysql搭建一个系统

node+express+mysql搭建一个系统
1、使用express创建项目

参考连接
NodeJS+express如何新建一个自己需要的项目

  • 1、安装exprss
$npm install express -g
$npm install express-generator -g
  • 1
  • 2
  • 2、项目根目录下 express 项目名
e:
md NodeJSProject     //在这里md是创建新的文件并命名
cd NodeJSProject     //进去刚刚创建的文件夹
md expressdemo		 //根据跟人习惯,此步骤可以不操作直接穿件app文件夹,“app”文件名也是自定义哦
cd expressdemo
express app      //创建服务器,此处app为项目名称,可自定义
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 3、启动服务器
cd 项目目录
npm install
npm start
  • 1
  • 2
  • 3

此时服务器运行在localhost:3000上,但是在bin/www

  • 4、改写app.js文件

添加以下内容

//改写
var http = require('http');
var server = http.createServer(app);
server.listen(3000)
  • 1
  • 2
  • 3
  • 4

实际只要注释掉最后一行代码(module.exports = app),换上自己的监听代码就可以

// module.exports = app;
app.listen(3000,()=>{
  console.log('服务器启动成功,监听在3000端口')
})

  • 1
  • 2
  • 3
  • 4
  • 5
  • 5、启动服务器

在项目根目录下运行 node app即可重新运行在3000端口下

2、安装mysql

1、参考其他mysql安装
2、创建数据库及数据库表
数据库:exapp
表:cate
表结构:
在这里插入图片描述

3、在项目目录里创建util目录及相应的数据库配置

./util/deconfig.js

const mysql= require('mysql')

module.exports={
  //数据库配置
  config:{
    host:'localhost',
    port:'3306',
    user:'root',
    password:'1222',
    database:'exapp'
  },
  //连接数据库,使用mysql连接池
  //写一个连接池的对象
  sqlConnect:function(sql,sqlArr,callback){
    var pool=mysql.createPool(this.config)
    pool.getConnection((err,conn)=>{
      console.log('hello mysql')
      if (err){
        console.log('连接失败')
        return
      }
      //事件驱动回调
      conn.query(sql,sqlArr,callback);
      //释放数据库连接
      conn.release()
    })
  }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
4、编辑路由

在项目目录里创建util目录及相应的数据库配置
编辑路由router/index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  // res.render('index', { title: 'Express' });
  //测试一下
  let sql="select * from cate"
  let sqlArr=[]
  let callBack=(err,data)=>{
    if (err){
      console.log('连接出错了')
    }else{
      res.send({
        'list':data
      })
    }
  }
  dbconfig.sqlConnect(sql,sqlArr,callBack)

});

module.exports = router;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

访问localhost:3000获得数据
在这里插入图片描述

5、对路由进行封装

新添./controller/cateController.js文件

//获取分类
var dbconfig = require('../util/dbconfig')

getCate=(req,res)=>{
  let sql="select * from cate"
  let sqlArr=[]
  let callBack=(err,data)=>{
    if (err){
      console.log('连接出错了')
    }else{
      res.send({
        'list':data
      })
    }
  }

  dbconfig.sqlConnect(sql,sqlArr,callBack)
}
module.exports={//将getCate方法暴露出去
  getCate
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

重新改造router/index.js文件

var express = require('express');
var router = express.Router();
var cate= require('../controller/cateController')
/* GET home page. */
router.get('/', cate.getCate);

module.exports = router;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

访问localhost:3000得到同样的访问结果
在这里插入图片描述

6、获取指定分类的文章列表

数据库表:
在这里插入图片描述

controller/cateController.js

//获取指定分类的文章列表
getPostCate=(req,res)=>{
  let {id}=req.query;//对象解析处id字段
  var sql=`select * from post where cate_id=?`
  var sqlArr=[id]
  let callBack=(err,data)=>{
    if (err){
      console.log('连接出错了')
    }else{
      res.send({
        'list':data
      })
    }
  }
  dbconfig.sqlConnect(sql,sqlArr,callBack)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

router/index.js

var express = require('express');
var router = express.Router();
var cate= require('../controller/cateController')
/* GET home page. */
router.get('/', cate.getCate);
//获取post路由
router.get('/getPostCate', cate.getPostCate);
module.exports = router;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

7、模拟发送验证码

创建新的路由控制逻辑
controller/UserController.js

//导入数据库对象
var dbconfig = require('../util/dbconfig')

//生成随机验证码
function rand(min,max){
  return Math.floor(Math.random()*(max-min))+min
}

//模拟发送验证码
sendCode=(req,res)=>{
  let phone=req.body.phone
  let code=rand(1000,9999)
  res.send({
    'code':200,
    'msg':'发送成功'
  })
  console.log(code)
}


module.exports={
  sendCode
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

创建路由
./router/users.js

var express = require('express');
var router = express.Router();
var User= require('../controller/UserController')

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});
router.get('/sendCode', User.sendCode);

module.exports = router;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

8、验证验证码是否重新发送过

userController.js

//导入数据库对象
var dbconfig = require('../util/dbconfig')

//生成随机验证码
function rand(min,max){
  return Math.floor(Math.random()*(max-min))+min
}
let validatePhoneCode=[]
let sendCodeP=(phone)=>{
  for (let item of validatePhoneCode){
    if (phone==item.phone){
      return true
    }
  }
  return false

}


//模拟发送验证码
sendCode=(req,res)=>{
  let phone=req.query.phone
  if (sendCodeP(phone)){
    res.send({
      code:400,
      msg:'已经发送过验证码,稍后再发'
    })
  }

  let code=rand(1000,9999)
  validatePhoneCode.push({
    phone:phone,
    code:code
  })
  console.log(validatePhoneCode)
  res.send({
    'code':200,
    'msg':'发送成功'
  })
  console.log(code)
}


module.exports={
  sendCode
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

router/user.js

var express = require('express');
var router = express.Router();
var User= require('../controller/UserController')

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});
router.get('/sendCode', User.sendCode);

module.exports = router;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在postman里测试连接
在这里插入图片描述

9、验证码登录

userController.js

//导入数据库对象
var dbconfig = require('../util/dbconfig')

//生成随机验证码
function rand(min,max){
  return Math.floor(Math.random()*(max-min))+min
}
let validatePhoneCode=[]
let sendCodeP=(phone)=>{
  for (let item of validatePhoneCode){
    if (phone===item.phone){
      return true
    }
  }
  console.log('before false')
  return false

}

//验证码匹配
let findCodeAndPhone=(phone,code)=>{
  for (let item of validatePhoneCode){
    if (phone==item.phone && code==item.code){
      return 'login'
    }

  }
  return 'error'
}


//模拟发送验证码
sendCode=(req,res)=>{
  let phone=req.query.phone
  if (sendCodeP(phone)){
    res.send({
      code:400,
      msg:'已经发送过验证码,稍后再发'
    })
  }

  let code=rand(1000,9999)
  validatePhoneCode.push({
    phone:phone,
    code:code
  })
  console.log(validatePhoneCode)
  res.send({
    'code':200,
    'msg':'发送成功'
  })
  console.log(code)
}

//验证码登录
codePhoneLogin=(req,res)=>{
  let {phone,code}=req.query
  //验证该手机号是否发送过验证码
  if(sendCodeP(phone)){
    //验证码和手机号时候匹配
    let status=findCodeAndPhone(phone,code)
    if (status=='login'){
      //登录成功
      res.send({
        code:200,
        msg:'登录成功'
      })
    }else if (status=='error'){
      //登录失败
      res.send({
        code:400,
        msg:'登录失败'
      })
    }
  }else{
    //登录失败
    res.send({
      code:400,
      msg:'未发送验证码'
    })
  }
}



module.exports={
  sendCode,
  codePhoneLogin
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

./router/user.js

var express = require('express');
var router = express.Router();
var User= require('../controller/UserController')

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});
router.get('/sendCode', User.sendCode);
router.get('/codePhoneLogin', User.codePhoneLogin);
module.exports = router;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

测试:注册测试的路径是不一样的
先测试这个端口

localhost:3000/users/sendCode?phone=12545482556
  • 1

获得随机验证码4385
在测试端口

localhost:3000/users/codePhoneLogin?phone=12545482556&code=4385
  • 1

获得登录信息
在这里插入图片描述
以后P8-P21不看了,老师讲得是在太无趣了
贴个地址
https://www.bilibili.com/video/BV1A7411N7KZ?p=8&spm_id_from=pageDriver

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/120270
推荐阅读
相关标签
  

闽ICP备14008679号