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


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

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

    app.js

    1. //导入express模块
    2. const express=require('express')
    3. //创建web服务器
    4. const app=express()
    5. // 导入 cors 中间件——支持跨域访问
    6. const cors = require('cors')
    7. // 将 cors 注册为全局中间件
    8. app.use(cors())
    9. //配置解析application/x-www-form-urlencoded格式数据的内置中间件
    10. app.use(express.urlencoded({ extended: false }))//extended默认值
    11. //在路由之前,封装函数
    12. // 响应数据的中间件
    13. app.use(function (req, res, next) {
    14. // status = 0 为成功; status = 1 为失败; 默认将 status 的值设置为 1,方便处理失败的情况
    15. res.cc = function (err, status = 1) {//status默认失败——传参
    16. res.send({
    17. // 状态
    18. status,
    19. // 状态描述,判断 err 是 错误对象 还是 描述错误字符串
    20. message: err instanceof Error ? err.message : err,//instanceof是否是Error实例
    21. })
    22. }
    23. next()//流转关系传下去
    24. })
    25. //导入并使用用户的路由模块
    26. const userRouter=require('./router/user.js')
    27. app.use('/api',userRouter)//加上统一的前缀——将七注册成为全局可以用的路由模块
    28. //启动服务器、使用3007端口
    29. app.listen(3007,()=>{
    30. console.log('http://127.0.0.1:3007 服务器启动成功')
    31. })

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

    1. //对应的路由处理函数
    2. //导入数据库操作模块
    3. const db=require('../db/index')
    4. //检测数据库是否导入成功
    5. // db.query('select 1',(err,results)=>{
    6. // if(err) return console.log(err.message)
    7. // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
    8. // })
    9. //导入bcryptjs包对明文密码进行加密
    10. const bcrypt=require('bcryptjs')
    11. //这是注册新用户的处理函数
    12. const regUser=function(req,res){//postreq.body
    13. //获取客户端提交给服务器的用户信息
    14. const userInfo=req.body
    15. //console.log(userInfo)——测试是否接收到表单数据
    16. //对表单中的数据进行合法性的校验
    17. if(!userInfo.username||!userInfo.password) return res.cc('用户名或者密码不合法')
    18. //定义SQL语句,查询用户名是否被占用
    19. const sqlStr='select * from ev_users where username=?'//sql语句
    20. db.query(sqlStr,[userInfo.username],(err,results)=>{
    21. //执行SQL语句失败_
    22. if(err) return res.cc(err)
    23. //select查询的结果是数组,用户名被占用——查询不会影响行数
    24. if(results.length>0) return res.cc('用户名被占用,请更换用户名')
    25. //用户名可用使用
    26. //调用bcrypt.hashSync进行加密--归还给userInfo
    27. userInfo.password=bcrypt.hashSync(userInfo.password,10)//加密的内容
    28. //console.log(userInfo)
    29. //定义插入新用户的SQL语句——插入的少使用表(字段)values(值) 插入多使用set
    30. const sqlStr1='insert into ev_users set ?'
    31. db.query(sqlStr1,{username:userInfo.username,password:userInfo.password},(err,results)=>{
    32. //执行SQL语句失败_
    33. if(err) return res.cc(err)
    34. //判断插入失败
    35. if(results.affectedRows!==1)return res.cc('注册用户失败,请稍后再试!')
    36. //c成功传参
    37. res.cc('注册用户成功!',0)
    38. })
    39. })
    40. }
    41. //这是登录的处理函数
    42. const login=function(req,res){//post
    43. res.send('注册OK')//响应给客户端的话
    44. }
    45. //向外暴露
    46. module.exports={
    47. regUser,
    48. login
    49. }

  • 相关阅读:
    H桥级联型五电平三相逆变器Simulink仿真模型
    有意识的神经网络之对比网络层和后意识层
    Linux基于多线程和任务队列实现生产消费模型
    objection 基础案例 一
    技术标准的演变:从HTML5到小程序技术
    逆向分析练习三(最长公共前缀)
    开源图编辑库 NebulaGraph VEditor 的设计思路分享
    QRadioButton、QCheckBox样式表
    ESP8266-Arduino编程实例-LM75温度传感器驱动
    Oracle创建表空间及用户
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126868737