• nodejs--开发自己的项目——5.1——个人中心模块——更新用户信息——设置的url:/my/userinfo ——post请求


    可以更改的内容有id,nickname,email

    定义路由和处理函数

    路由模块 

    1. //导入express模块
    2. const express=require('express')
    3. //创建路由对象
    4. const Router=express.Router()
    5. //导入处理函数的模块
    6. const userInfo_hander=require('../router_handler/userinfo')
    7. //挂载具体路由1
    8. //监听客户端获取用户基本信息
    9. Router.get('/userinfo',userInfo_hander.getUserInfo)
    10. //更新用户的基本信息
    11. Router.post('/userinfo', userInfo_hander.updateUserInfo)
    12. //向外导出路由
    13. module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}

     用户路由处理函数模块

    1. // 导入数据库操作模块
    2. const db=require('../db/index')
    3. //获取用户信息
    4. exports.getUserInfo=(req,res)=>{
    5. //测试数据库是否导入成功
    6. // db.query('select 1',(err,results)=>{
    7. // if(err) return console.log(err.message)
    8. // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
    9. //})
    10. //定义查询用户的SQL语句
    11. const sqlStr='select id,username,nickname,email,user_pic from ev_users where id= ?'
    12. db.query(sqlStr,req.auth.id,(err,results)=>{
    13. //执行SQL语句失败
    14. if(err) return res.cc(err)
    15. //执行SQL语句成功,但是执行的结果可能为空
    16. if(results.length!==1) return res.cc('获取用户信息失败')
    17. res.send({
    18. status:0,
    19. message:'用户信息成功',
    20. date:results[0],//查询的结果是数组
    21. })
    22. })
    23. }
    24. //更新用户基本信息的处理函数
    25. exports.updateUserInfo=(req,res)=>{//同样也是有权限的接口
    26. res.send('ok')
    27. }

    测试:同样是有权限的接口需要请求头中含有:Authorization

     

    验证表单数据(验证规则:joi模块)

     

    验证规则模块的定义

    1. //表单数据验证的包
    2. const joi=require('joi')
    3. //定义验证规则——查看对应文档
    4. //用户名的验证规则
    5. const username=joi.string()
    6. .min(1)//最小长度是1
    7. .max(10)//最大长度是10
    8. .required()//所必须传递的字符串
    9. //密码的验证规则
    10. const password= joi.string() .pattern(/^[\S]{6,15}$/)
    11. // .pattern(/^[\S]{6,15}$/)//满足自定义正则表达式——且长度为6——12之间\S不能有空字符——
    12. .required()//使用正则表达式
    13. //定义密码重验证的规则
    14. //repeat_password: joi.ref('password'),
    15. //定义更新用户的验证规则
    16. const id1=joi.number().integer().min(1).required()//integer整数
    17. const nickname1 = joi.string().required()
    18. const email1 = joi.string().email().required()
    19. module.exports={
    20. body:{//校验req.body中的数据
    21. username,//与客户端提交的属性要相同——属于bady中的username属性
    22. password,//password:password//相同在es6中可以简写 省去
    23. }
    24. }
    25. //验证规则对象——更新用户基本信息
    26. module.exports.update_userinfo_schema ={
    27. body:{//校验req.body中的数据
    28. //与客户端提交的属性要相同——属于bady中的username属性
    29. id:id1,//id是body传过来的参数
    30. nickname:nickname1,
    31. email:email1,
    32. }
    33. }

    在路由模块将验证规则导入——需要在路由前注意:当传递有多个exports时候。可以使用花括号选中所选对象

    1. //导入express模块
    2. const express=require('express')
    3. //创建路由对象
    4. const Router=express.Router()
    5. //导入处理函数的模块
    6. const userInfo_hander=require('../router_handler/userinfo')
    7. //挂载具体路由1
    8. //监听客户端获取用户基本信息
    9. Router.get('/userinfo',userInfo_hander.getUserInfo)
    10. //1、导入验证表单数据的中间件
    11. var expressJoi = require('@escook/express-joi')
    12. //2、导入需要验证的规则对象
    13. const {update_userinfo_schema}=require('../schema/user')//存放是是规则_body里面的对象
    14. //更新用户的基本信息
    15. Router.post('/userinfo',expressJoi(update_userinfo_schema), userInfo_hander.updateUserInfo)
    16. //向外导出路由
    17. module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}

     

     

     

    实现更新用户基本信息的功能

     路由处理函数模块

    1. // 导入数据库操作模块
    2. const db=require('../db/index')
    3. //获取用户信息
    4. exports.getUserInfo=(req,res)=>{
    5. //测试数据库是否导入成功
    6. // db.query('select 1',(err,results)=>{
    7. // if(err) return console.log(err.message)
    8. // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
    9. //})
    10. //定义查询用户的SQL语句
    11. const sqlStr='select id,username,nickname,email,user_pic from ev_users where id= ?'
    12. db.query(sqlStr,req.auth.id,(err,results)=>{
    13. //执行SQL语句失败
    14. if(err) return res.cc(err)
    15. //执行SQL语句成功,但是执行的结果可能为空
    16. if(results.length!==1) return res.cc('获取用户信息失败')
    17. res.send({
    18. status:0,
    19. message:'查询用户信息成功',
    20. date:results[0],//查询的结果是数组
    21. })
    22. })
    23. }
    24. //更新用户基本信息的处理函数
    25. exports.updateUserInfo=(req,res)=>{//同样也是有权限的接口
    26. //测试数据库是否导入成功
    27. // db.query('select 1',(err,results)=>{
    28. // if(err) return console.log(err.message)
    29. // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
    30. // })
    31. //定义查询用户的SQL语句
    32. const sqlStr='update ev_users set ? where id= ?'
    33. db.query(sqlStr,[req.body,req.body.id],(err,results)=>{//id是token传递的-只改自己id的信息req.auth.id]
    34. //执行SQL语句失败
    35. if(err) return res.cc(err)
    36. //执行SQL语句成功,但是影响行数不为1
    37. if(results.affectedRows!==1) return res.cc('更新用户信息失败')
    38. res.cc('更新用户信息成功',0)
    39. })
    40. }

     

     

     

     

  • 相关阅读:
    JavaScript【DOM概述、节点、节点树 、Node.nodeType属性 、document对象(属性、方法/获取元素、方法/创建元素)、Element对象属性】(十)
    4.3全局描述符表
    Nginx实现本地http转https请求
    Class文件解析
    大数据必学Java基础(十二):基本数据类型
    element 表格拖拽保存插件
    DLink 815路由器栈溢出漏洞分析与复现
    【数据库系统】数据库编程
    leetcode(力扣) 509. 斐波那契数 (动态规划入门,模板代码)
    RK3399 Android7.1电脑端adb devices检测不到设备
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126920718