使用nuxt,express,mysql,nginx创建个人博客系列-08

214
2020-01-24 18:37
10 个月前

用户注册和登陆

上一章节说到我们回调用 xx/api/createUser和xx/api/login的接口,那么我们要先到admin/routers/index.js目录添加路由规则。以下是添加的代码

import user from './user' // 引入user
router.use('/api', user) //路由经过/api的时候进入user处理,没有

在routers的目录创建user.js。目录是这样的:server/admin/routers/user.js,以下是代码
说明:以下引入的东西大家自行引入,自己写的模块我会说出来的

import {
  Router
} from 'express'
const router = Router()
import util from '../../util' // 引入自定义的util
import mysql from '../../libs/mysql' // 引入自己写的mysql插件
import md5 from 'MD5'; // 引入md5~加密密码

router.post('/createUser', async (req, res, next) => {
  let {
    name,
    password
  } = req.body;
  if (name && password) {
    let searchUser = `select * from users where name = ?`;
    let sql = `insert into users(name,password) values (?)`;
    let mysqlCon = await mysql.getConnect();
    let resultUser = await mysql.query(mysqlCon, searchUser, name);
    if(resultUser.length){
      //判断用户是否已经存在
      let release = await mysql.release(mysqlCon)
      return res.send(util.resError({
        code:'name',
        msg: '此用户已存在'
      }))
    }
    let result = await mysql.query(mysqlCon, sql, [name, md5(md5(password))])
    let release = await mysql.release(mysqlCon)
    //判断是否插入成功
    if (result.affectedRows !== 1) {
      return res.send(util.resError({
        msg: '插入失败'
      }))
    }
   //设置session,把用户id和名字加上
    req.session.user = {
      id: result.insertId,
      name: name
    }
    return res.send(util.resSuccess({
      data: {
        body: req.body,
        sql: result
      }
    }))
  }
  return res.send(util.resError({
    msg: '请输入名字和密码'
  }))

})
router.post('/login',async  (req, res, next) =>{
  let {
    name,
    password
  } = req.body;
  if (name && password) {
    let sql = `select * from users where name = ?`;
    let mysqlCon = await mysql.getConnect();
    let result = await mysql.query(mysqlCon, sql, name)
    let release = await mysql.release(mysqlCon);
    if(result.length){
      //根据名字判断是否有这个用户
      if(result[0]['password'] == md5(md5(password))){
       //判断用户密码是否正确,然后把用户信息存到session
        req.session.user = {
          id: result[0].id,
          name: name
        }
        return res.send(util.resSuccess({
          data:{
            name:result[0].name,
          }
        }))
      }else{
        return res.send(util.resError({
          code:'password',
          msg: '密码错误'
        }))
      }
    }else{
      return res.send(util.resError({
        code:'name',
        msg: '此人不存在'
      }))
    }
  }
  return res.send(util.resError({
    msg: '请输入名字和密码'
  }))

})
export default router;

上面的代码有用到了自己封装的mysql,和util。下面我把这两个文件放出来
文件目录:server/lib/mysql.js

import mysql from 'mysql'; //引入mysql模块
import config from '../config'  //引入自定义配置,要往config里面添加mysql配置
/**
*这个代码是创建mysql连接池,池的概念大家自行搜索
*/
const pool = mysql.createPool({
  connectionLimit: 50,
  host: config.mysql.host,
  user: config.mysql.user,
  password: config.mysql.password,
  port: config.mysql.port,
  database: config.mysql.database,
  dateStrings:true,
  multipleStatements: true //是否允许执行多条sql语句
}); //创建连接池
/**
*这个代码是从池里面获取连接,使用了promise,成功返回连接
*/
const getConnect = ()=>{
  return new Promise((resolve,reject)=>{
    pool.getConnection((err,connection)=>{
      if(err) reject(err);
      console.log('连接了')
      resolve(connection)
    })
  })
}
/**
*这个代码是断开连接,参数是传入要断开的链接
*/
const release = (connection)=>{
  return new Promise((resolve, reject) => {
    if(!connection){
      console.log('没有连接')
      reject(false)
    }
    connection.release();
    console.log('断了连接了')
    resolve(true);
  });
}
/**
*这个代码执行query方法,返回结果集。
*/
const query = (connection,sql,...params)=>{
  return new Promise((resolve, reject)=>{
    console.log(mysql.format(sql,params));
    connection.query(sql,params,function(err,res){
      if(err){
        reject(err);
      }
      resolve(res);
    })
  })
}
export default {
  getConnect,
  release,
  query
}

文件目录:server/config/index.js
添加mysql配置

 export default{
  //mysql 配置
  "mysql":{ 
    "host":"localhost",
    "port":"3306",
    "user":"root",
    "password":"****",
    "database":"blog"
  },
  //后台配置
  "admin":{
    "route":"/myadmin", //路由前置
    "session":{ //session配合
      "name":"mysession:s",
      "secret":"***",
      "maxAge":2500000,
      "resave":false,//每次请求都会重新设置
      "saveUninitialized" :false,//为空不保存
    }
  },
}

文件目录:server/util/index.js

export default {
  codeDefault: {
    data: {},
    code: 0,
    status: 1,
    msg: ''
  },
  //返回失败代码
  resError(opt) {
    return {...this.codeDefault,status:0,...opt};
  },
 //返回成功代码
  resSuccess(opt) {
    return {...this.codeDefault,...opt}
  },
}

现在可以注册和登录你的管理员了
注册页面,注册成功会自动跳转到首页,我在配置文件上配置路由地址是/myAdmin,所以进入的是http://127.0.0.1:3000/myAdmin/register
register.html


上一篇-使用nuxt,express,mysql,nginx创建个人博客系列-07
下一篇-使用nuxt,express,mysql,nginx创建个人博客系列-09