nodejs--开发自己的项目——3.1--优化-封装响应给客户端的内容- res.send(状态和错误消息)

在路由之前定义中间件——封装函数——全局定义中间件,中间件中拿到res对象,挂载函数,有默认状态的设置,instanceof是否是Error实例,判断错误对象和实例

//在路由之前,封装函数
// 响应数据的中间件
app.use(function (req, res, next) {
    // status = 0 为成功; status = 1 为失败; 默认将 status 的值设置为 1,方便处理失败的情况
    res.cc = function (err, status = 1) {//status默认失败——传参
      res.send({
        // 状态
        status,
        // 状态描述,判断 err 是 错误对象 还是 描述错误字符串
        message: err instanceof Error ? err.message : err,//instanceof是否是Error实例
      })
    }
    next()//流转关系传下去
  })

app.js


//导入express模块
const express=require('express')
//创建web服务器 
const app=express()

// 导入 cors 中间件——支持跨域访问
const cors = require('cors')
// 将 cors 注册为全局中间件
app.use(cors())
//配置解析application/x-www-form-urlencoded格式数据的内置中间件
app.use(express.urlencoded({ extended: false }))//extended默认值

//在路由之前,封装函数
// 响应数据的中间件
app.use(function (req, res, next) {
    // status = 0 为成功; status = 1 为失败; 默认将 status 的值设置为 1,方便处理失败的情况
    res.cc = function (err, status = 1) {//status默认失败——传参
      res.send({
        // 状态
        status,
        // 状态描述,判断 err 是 错误对象 还是 描述错误字符串
        message: err instanceof Error ? err.message : err,//instanceof是否是Error实例
      })
    }
    next()//流转关系传下去
  })
//导入并使用用户的路由模块
const userRouter=require('./router/user.js')
app.use('/api',userRouter)//加上统一的前缀——将七注册成为全局可以用的路由模块



//启动服务器、使用3007端口
app.listen(3007,()=>{
    console.log('http://127.0.0.1:3007  服务器启动成功')
})

在之后的路由处理函数中调用此函数--

//对应的路由处理函数

//导入数据库操作模块
const db=require('../db/index')
//检测数据库是否导入成功
// db.query('select 1',(err,results)=>{

//     if(err) return console.log(err.message)

//     console.log(results)//此结果可以正常打印输出就表示数据库连接正常

// })
//导入bcryptjs包对明文密码进行加密
const bcrypt=require('bcryptjs')
//这是注册新用户的处理函数
const regUser=function(req,res){//postreq.body
    //获取客户端提交给服务器的用户信息
    const userInfo=req.body
    //console.log(userInfo)——测试是否接收到表单数据
    //对表单中的数据进行合法性的校验
    if(!userInfo.username||!userInfo.password)  return res.cc('用户名或者密码不合法')
     
    //定义SQL语句,查询用户名是否被占用
const sqlStr='select * from ev_users where username=?'//sql语句
db.query(sqlStr,[userInfo.username],(err,results)=>{
    //执行SQL语句失败_
    if(err) return  res.cc(err)
    //select查询的结果是数组,用户名被占用——查询不会影响行数
    if(results.length>0) return res.cc('用户名被占用,请更换用户名')
    //用户名可用使用
    //调用bcrypt.hashSync进行加密--归还给userInfo
    userInfo.password=bcrypt.hashSync(userInfo.password,10)//加密的内容
    //console.log(userInfo)

    //定义插入新用户的SQL语句——插入的少使用表(字段)values(值) 插入多使用set
    const sqlStr1='insert into ev_users set ?'
    db.query(sqlStr1,{username:userInfo.username,password:userInfo.password},(err,results)=>{
     //执行SQL语句失败_
    if(err) return  res.cc(err)
    //判断插入失败
    if(results.affectedRows!==1)return  res.cc('注册用户失败,请稍后再试!') 
    //c成功传参
    res.cc('注册用户成功!',0) 
      

    })
    
})
  
}
//这是登录的处理函数
const login=function(req,res){//post
    res.send('注册OK')//响应给客户端的话
}
//向外暴露
module.exports={
    regUser,
    login
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值