后台项目 Express-Mysql-Vue3-TS-Pinia 注册逻辑

215 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

后台项目 Express-Mysql-Vue3-Ts-Pinia 注册逻辑

引言

通过之前一段时间 ExpressMysql 的学习

这里尝试来搭建一个 后台系统 来巩固下学习的技术。

初始化

首先就是我们的建表,这里先建立3张表,当然这是不够的,后续再加。

分别为

  • 用户表

  • 天气表

  • 文章表

这里在 controller/init/index.js 中进行创建逻辑处理

const sqlConnect = require('../../model/index')
const sqlAll = require('./sql')

const init = (req, res, next) => {
  try {
    const createTableUser2 = sqlAll.createTableUser
    const createTableWeather2 = sqlAll.createTableWeather
    const createTableArticle2 = sqlAll.createTableArticle

    const sqlArr = []
    const callback = (error, results) => {
      if (error) {
        console.log('连接出错')
        return
      }
    }

    const callback2 = (error, results) => {
      if (error) {
        console.log('连接出错')
        return
      }
    }

    const callback3 = (error, results) => {
      if (error) {
        console.log('连接出错')
        return
      }

      res.send({
        list: results,
        message: '用户和天气和文章 均创建成功'
      })
    }

    sqlConnect(createTableUser2, sqlArr, callback)
    sqlConnect(createTableWeather2, sqlArr, callback2)
    sqlConnect(createTableArticle2, sqlArr, callback3)
  } catch (err) {
    next(err)
  }
}

mysqlsql 的语句如下

const createTableUser = `
create table if not exists user(
  id int primary key auto_increment comment '主键',
  username varchar(10) not null unique comment '用户名',
  password varchar(10) not null comment '密码',
  create_time datetime not null default current_timestamp comment '创建日期'
) comment '用户表';
`

const createTableWeather = `
create table if not exists weather(
  id int primary key auto_increment comment '主键',
  name varchar(10) not null default '' comment '天气名'
) comment '天气表';
`

const createTableArticle = `
create table if not exists article(
  id int primary key auto_increment comment '主键',
  content varchar(2000) not null default '' comment '文章内容',
  create_time datetime not null default current_timestamp comment '日期',
  weatherid int comment '天气的外键',
  userid int comment '用户的外键',
  constraint fk_weatherid foreign key (weatherid) references weather (id),
  constraint fk_userid foreign key (userid) references user (id)
) comment '文章表';
`

module.exports = {
  createTableUser,
  createTableWeather,
  createTableArticle,
}

我们通过访问路由地址即可创建数据库表成功。

image.png

我们可以通过 navicat 可视化数据库,发现里面也有对应的表产生。

但是目前里面是没有数据的,下面进行注册用户

image.png

注册用户

在上面数据库中的表已经创建完毕,现在进行注册用户行为。

我们先把前端项目中的注册位置,添加访问接口

  • 首先后端 Express 来定义访问的 api 接口地址为 /api/user/register

  • 在前端注册页面添加逻辑,仅仅做个请求的逻辑

image.png

之后在 controller/user/index.js 中进行数据库逻辑处理

  • 先判断是否数据库中存在这个用户

  • 若存在则返回 注册失败

  • 若成功则返回 注册成功

const register = (req, res, next) => {
  try {
    const { username, password } = req.query

    const sql = sqlAll.selectUsername
    const sqlArr = [username]

    const sql2 = sqlAll.insertUser
    const sqlArr2 = [username, password]

    const callback = (error, results) => {
      if (error) {
        console.log('连接出错')
        return
      }

      if (results.length === 0) {
        // 注册该用户
        sqlConnect(sql2, sqlArr2, callback2)
      } else {
        console.log('注册失败')


        // 该用户已经存在
        res.send({
          code: 200,
          data: {
            message: '该用户已经存在,无法注册',
            flag: false
          }
        })
      }
    }

    const callback2 = (error, results) => {
      if (error) {
        console.log('连接出错2',error)
        return
      }

      console.log('插入成功')

      console.log('results', results)

      res.send({
        code: 200,
        data: {
          message: '注册成功',
          flag: true
        }
      })
    }

    sqlConnect(sql, sqlArr, callback)
  } catch (err) {
    next(err)
  }
}

其中的 sql 语句为:

// 查找某个用户名是否存在
const selectUsername = `select * from user where username=?;`


// 插入新用户数据
const insertUser = `insert into user(username,password) values(?,?)`

之后在页面中点击 确认注册 按钮,即可注册成功。

image.png

image.png

image.png

如果重复注册的话,结果如下:

image.png

image.png

总结

通过 Express-Mysql-Vue3-TS-Pinia 做出一个 后台系统 项目,后端项目表的一些初始化 和 注册逻辑