【Node】中Express框架连接Mysql实现用户注册接口

Node.js中Express框架连接Mysql实现用户注册接口

处理用户注册接口简单分为三步:

1、注册校验

2、完善逻辑

3、拆分模块

拆分模块能够使部分功能能够复用,封装好各个模块使得模块间只能通过有限的接口互相访问,从而降低耦合,拆分模块使得前期提升开发效率,后期维护更加方便

目前目录如下

app中config.js用来写配置文件,database是配置数据库

controller是集成业务逻辑

middleware 是集成中间件

router为路由

services为集中sql函数

扫描二维码关注公众号,回复: 15526570 查看本文章

目录在这里插入图片描述

安装的包为express,mysql2,nodemon

app.js

const express = require("express")
const app = express()
// 引入配置文件
const {
    
    APP_PORT} = require("./app/config")
//连接数据库
require("./app/database")

//解析post请求参数
app.use(express.json()) //解析json格式
app.use(express.urlencoded()) //解析form表单格式

const router = require("./router")
app.use(router)

app.listen(APP_PORT, () => {
    
    
    console.log(`服务器启动成功 http://localhost:${
      
      APP_PORT}`);
})

router中的app.js

const express = require("express")
const router = express.Router()
// 中间件
const {
    
    verfyRegister} = require("../middleware/app-middleware")
// 控制器
const {
    
    handleRegister} = require("../controller/app-controller")

//用户注册
router.post("/register",verfyRegister,handleRegister)

router.post("/login",(req,res)=> {
    
    
    res.json({
    
    
        code: 200,
        msg: "注册成功"
    })
})

module.exports = router

router中的index.js

const express = require("express")
const router = express.Router()

router.use("/sys",require('./app'))// /sys是前缀 可以通过use加
router.use(require('./user'))

module.exports = router
//index.js文件是将其他接口总结起来,方便调用

router中的user,js

const express = require("express")
const router = express.Router()

router.get("/user",(req,res)=> {
    
    
    res.json({
    
    
        code: 200,
        msg: "成功",
        data:{
    
    
            username:"zhangsan",
            email:"[email protected]"
        }
    })
})


module.exports = router

controller

const {
    
     insertUserByUsername } = require("../services/app-services")


class appController {
    
    
    // 处理注册的业务逻辑
    async handleRegister (req, res) {
    
    
        // 1、获取前端传过来的数据
        // 2、校验注册信息是否存在,不存在return
        // 3、从数据库校验用户是否注册过
        // 4、保存进数据库
        const {
    
     username, password, tel } = req.body
        try {
    
    
            await insertUserByUsername(username, password,tel)
            res.json({
    
    
                code: 200,
                msg: "注册成功"
            })
        } catch (error) {
    
    
            res.status(500).send("服务器出问题了")

        }
    }
}


//appController是一个类,所以需要new一个实例对象出来
module.exports = new appController()

middleware

const {
    
     getUserByUsername } = require("../services/app-services")

//校验注册的中间件
const verfyRegister = async (req, res, next) => {
    
    
    const {
    
     username, password, tel } = req.body
    if (!username || !password || !tel) {
    
    
        res.status(401).json({
    
    
            code: '-1',
            msg: "用户名和密码和手机号必填"
        })
        return
    }
    try {
    
    
        //查询数据库,查询用户在数据库中是否存在
        const dbRes = await getUserByUsername(username, password)
        if (dbRes.length !== 0) {
    
    
            res.send({
    
    
                code: '-1',
                msg: "该用户已注册,请登录"
            })
            return
        }
    } catch (error) {
    
    
        res.status(500).send("服务器出问题了")
        return
    }
    next()
}



module.exports = {
    
    
    verfyRegister
}

app中的config.js

const config = {
    
    
    //端口号
    APP_PORT: 3309,
    //mysql配置
    MYSQL_host: "localhost",
    MYSQL_user: "root",
    MYSQL_password: "你的密码",
    MYSQL_port: 你的端口号,
    MYSQL_database: "你的数据库名称",
    MYSQL_waitForConnections: true,
    MYSQL_connectionLimit: 10,
    MYSQL_queueLimit: 0,

}

module.exports = config

app中的database.js

const mysql = require("mysql2")
const {
    
     MYSQL_host, MYSQL_user,MYSQL_password,MYSQL_port, MYSQL_database, MYSQL_waitForConnections, MYSQL_connectionLimit, MYSQL_queueLimit } = require("./config")

const connections = mysql.createPool({
    
    
    host: MYSQL_host,
    user: MYSQL_user,
    password: MYSQL_password,
    port:MYSQL_port,
    database: MYSQL_database,
    waitForConnections: MYSQL_waitForConnections, 
    connectionLimit: MYSQL_connectionLimit,
    queueLimit: MYSQL_queueLimit,

})

connections.getConnection(function (err, conn) {
    
    
    conn.connect((err) => {
    
    
        if (err) {
    
    
            console.log("连接失败", err);
        } else {
    
    
            console.log("数据库连接成功~");
        }
    });
})


module.exports = connections.promise()

猜你喜欢

转载自blog.csdn.net/m0_63779088/article/details/128595187