12.26

入口文件

//根目录下入口文件
//导入express模块
const express = require('express')
//创建实例
const app = express()
const joi = require('joi')
//引入cors中间件 配置为全局中间件 支持跨域
const cors = require('cors')
app.use(cors())
//引入配置解析 `application/x-www-form-urlencoded` 格式的表单数据的中间件
//express的内置中间件
app.use(express.urlencoded({ extended: false }))
//为了简化res.send()代码 封装一个函数 声明一个中间件 在之后的路由中使用
app.use((req, res, next) => {
    //定义函数
    res.cc = (err,status=1) => {
        res.send({
            status,
            message:err instanceof Error ? err.message:err
        })
    }
    next()
})
//导入并注册路由模块
const userRouter = require('./router/user')
app.use('/api', userRouter)//api为访问前缀
//定义错误级别的中间件
app.use(function (err, req, res, next) {
    // 数据验证失败
    if (err instanceof joi.ValidationError) return res.cc(err)
    // 未知错误
    res.cc(err)
  })
//监听启动
app.listen(3007, () => {
    console.log('api server running at http://127.0.0.1:3007')
})

路由

//只存放客户端请求与处理函数之间的关系
//引入express
const express=require('express')
//创建路由对象
const router = express.Router()
//导入router_handler中的user.js
const userHandler = require('../router_handler/user.js')
//导入验证数据的中间件
const expressJoi = require('@escook/express-joi')
//导入需要验证的规则对象
const {text}=require('../schema/user.js')

//注册新用户  使用这个中间件 
router.post('/reguser',expressJoi(text),userHandler.regUser )

//登录
router.post('/login',userHandler.login )

//路由对象共享
module.exports = router

 路由函数

//抽离用户路由模块中的处理函数
//导入数据库模块
const db = require('../db/index.js')
//导入bcryptjs模块
const bcrypt=require('bcryptjs')
//注册模块
exports.regUser = (req, res) => {
    //1.检测表单是否合法
    //接收表单数据
    const userinfo = req.body
    //判断数据是否合法
    // if (!userinfo.username || !userinfo.password) {
    //     return res.send({
    //         status: 1,
    //         message:'用户名或者密码不能为空'
    //     })
    // }

    //2.监测用户名是否被占用 需要导入数据库模块
    const sql1 = 'select * from ev_users where username=?'
    db.query(sql1, userinfo.username, (err,results) => {
        if (err) {
            // return res.send({status:1 ,message:err.message})
            return res.cc(err)
        }
        if (results.length > 0) { //查询返回的是数组 如果数组里有数据 长度大于零 说明用户已存在
            // return res.send({status:1, message:'用户名已存在 请更换'})
          return   res.cc('用户名已存在 请更换')
        }
    
        //给符合要求的用户密码加密
    userinfo.password = bcrypt.hashSync(userinfo.password, 10)
    //插入注册的新用户信息
        const sql2 = 'insert into ev_users set ?'
        db.query(sql2, { username: userinfo.username, password: userinfo.password }, (err, results) => {
            if (err) {
                // return res.send({status:1 ,message:err.message})
             return    res.cc(err)
            }
            //语句执行成功但是影响行数不唯一 也是失败
            if (results.affectedRows !== 1) {
                // return res.send({status:1, message:'注册用户失败 稍后再试'})
                return res.cc('注册用户失败 稍后再试')
            }
            //注册成功
            // res.send({ status: 0, message: '注册成功' })
            res.cc('注册成功',0)
        })
    })
   


}
//登录模块
exports.login = (req,res) => {
    res.send('login ok')
}

 与数据库联系

//导入mysql模块
const mysql = require('mysql')
//与数据库联系
const db = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: 'admin123',
    database:'my_db_01'
})
//暴露
module.exports = db

 验证规则

//优化表单数据验证


//用户信息验证规则模块
const joi = require('joi')
//用户名验证规则
const username = joi.string().alphanum().min(1).max(10).required()
//密码验证规则
const password = joi.string().pattern(/^[\S]{6,12}$/).required() //非空字符6-12位
//暴露验证规则
exports.text = {
    body: { //验证表单数据req.body上的username password
        username,
        password
    },
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值