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

路由模块
- //导入express模块
- const express=require('express')
-
- //创建路由对象
- const Router=express.Router()
- //导入处理函数的模块
- const userInfo_hander=require('../router_handler/userinfo')
-
- //挂载具体路由1
- //监听客户端获取用户基本信息
- Router.get('/userinfo',userInfo_hander.getUserInfo)
- //更新用户的基本信息
- Router.post('/userinfo', userInfo_hander.updateUserInfo)
- //向外导出路由
- module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}
用户路由处理函数模块![]()
- // 导入数据库操作模块
- const db=require('../db/index')
- //获取用户信息
- exports.getUserInfo=(req,res)=>{
- //测试数据库是否导入成功
- // db.query('select 1',(err,results)=>{
- // if(err) return console.log(err.message)
- // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
- //})
- //定义查询用户的SQL语句
- const sqlStr='select id,username,nickname,email,user_pic from ev_users where id= ?'
- db.query(sqlStr,req.auth.id,(err,results)=>{
- //执行SQL语句失败
- if(err) return res.cc(err)
- //执行SQL语句成功,但是执行的结果可能为空
- if(results.length!==1) return res.cc('获取用户信息失败')
- res.send({
- status:0,
- message:'用户信息成功',
- date:results[0],//查询的结果是数组
- })
- })
-
- }
- //更新用户基本信息的处理函数
- exports.updateUserInfo=(req,res)=>{//同样也是有权限的接口
- res.send('ok')
-
- }
测试:同样是有权限的接口需要请求头中含有:Authorization


验证规则模块的定义
-
- //表单数据验证的包
- const joi=require('joi')
- //定义验证规则——查看对应文档
-
- //用户名的验证规则
- const username=joi.string()
- .min(1)//最小长度是1
- .max(10)//最大长度是10
- .required()//所必须传递的字符串
- //密码的验证规则
- const password= joi.string() .pattern(/^[\S]{6,15}$/)
- // .pattern(/^[\S]{6,15}$/)//满足自定义正则表达式——且长度为6——12之间\S不能有空字符——
- .required()//使用正则表达式
- //定义密码重验证的规则
- //repeat_password: joi.ref('password'),
- //定义更新用户的验证规则
- const id1=joi.number().integer().min(1).required()//integer整数
- const nickname1 = joi.string().required()
- const email1 = joi.string().email().required()
- module.exports={
- body:{//校验req.body中的数据
- username,//与客户端提交的属性要相同——属于bady中的username属性
- password,//password:password//相同在es6中可以简写 省去
- }
-
- }
- //验证规则对象——更新用户基本信息
- module.exports.update_userinfo_schema ={
- body:{//校验req.body中的数据
- //与客户端提交的属性要相同——属于bady中的username属性
- id:id1,//id是body传过来的参数
- nickname:nickname1,
- email:email1,
-
- }
-
- }
在路由模块将验证规则导入——需要在路由前注意:当传递有多个exports时候。可以使用花括号选中所选对象
- //导入express模块
- const express=require('express')
-
- //创建路由对象
- const Router=express.Router()
- //导入处理函数的模块
- const userInfo_hander=require('../router_handler/userinfo')
-
- //挂载具体路由1
- //监听客户端获取用户基本信息
- Router.get('/userinfo',userInfo_hander.getUserInfo)
-
- //1、导入验证表单数据的中间件
- var expressJoi = require('@escook/express-joi')
- //2、导入需要验证的规则对象
- const {update_userinfo_schema}=require('../schema/user')//存放是是规则_body里面的对象
-
- //更新用户的基本信息
- Router.post('/userinfo',expressJoi(update_userinfo_schema), userInfo_hander.updateUserInfo)
- //向外导出路由
- module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}


路由处理函数模块
- // 导入数据库操作模块
- const db=require('../db/index')
- //获取用户信息
- exports.getUserInfo=(req,res)=>{
- //测试数据库是否导入成功
- // db.query('select 1',(err,results)=>{
- // if(err) return console.log(err.message)
- // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
- //})
- //定义查询用户的SQL语句
- const sqlStr='select id,username,nickname,email,user_pic from ev_users where id= ?'
- db.query(sqlStr,req.auth.id,(err,results)=>{
- //执行SQL语句失败
- if(err) return res.cc(err)
- //执行SQL语句成功,但是执行的结果可能为空
- if(results.length!==1) return res.cc('获取用户信息失败')
- res.send({
- status:0,
- message:'查询用户信息成功',
- date:results[0],//查询的结果是数组
- })
- })
-
- }
- //更新用户基本信息的处理函数
- exports.updateUserInfo=(req,res)=>{//同样也是有权限的接口
- //测试数据库是否导入成功
- // db.query('select 1',(err,results)=>{
- // if(err) return console.log(err.message)
- // console.log(results)//此结果可以正常打印输出就表示数据库连接正常
- // })
- //定义查询用户的SQL语句
- const sqlStr='update ev_users set ? where id= ?'
- db.query(sqlStr,[req.body,req.body.id],(err,results)=>{//id是token传递的-只改自己id的信息req.auth.id]
- //执行SQL语句失败
- if(err) return res.cc(err)
- //执行SQL语句成功,但是影响行数不为1
- if(results.affectedRows!==1) return res.cc('更新用户信息失败')
- res.cc('更新用户信息成功',0)
-
- })
-
- }

