【node.js后台api项目】(七)更新用户头像接口

  • 1、接口相关信息
  • 2、 定义路由和处理函数
  • 3、验证提交的数据
  • 4、实现更新用户基本信息功能

1、接口相关信息

  • 路由: /my/update/avatar
  • method: post
  • 请求头需要携带 Authorization字段进行身份认证
  • 请求体
    • avatar: 新头像,base64格式的字符串

2、 定义路由和处理函数

  1. /router/userinfo.js模块中,新增 更新用户基本信息 的路由:
// 更新用户邮箱路由
router.post('/update/avatar', userinfo_handler.updateAvatar)
  1. /router_handler/userinfo.js 模块中,定义并向外共享 更新用户头像 的路由处理函数:
// 更新用户头像路由处理函数
const updateAvatar = (req, res) => {res.send('ok')
}

使用postman先测试一下

3、验证提交的数据

这里依然使用joi包对base64格式的字符串进行验证,先看一下官方文档

Requires the string value to be a valid data URI string.
options - optional settings:
paddingRequired - optional parameter defaulting to true which will require = padding if true or make padding optional if false.

const schema = Joi.string().dataUri();
schema.validate('VE9PTUFOWVNFQ1JFVFM='); // ValidationError: "value" must be a valid dataUri string
schema.validate('data:image/png;base64,VE9PTUFOWVNFQ1JFVFM='); // No Error

Import to joi Schema Tester
Possible validation errors: string.dataUri

1.在 /schema/user.js 验证规则模块中,定义 avatar 的验证规则如下:

// 定义 更新头像 验证规则
const update_avatar_schema = {// dataUri() 指的是如下格式的字符串数据:// data:image/png;base64,VE9PTUFOWVNFQ1JFVFM=avatar: Joi.string().dataUri().required
}
  1. /schema/user.js 中的中间件 joiExpress进行改造
// 定义数据校验中间件
const joiExpress = (req, res, next) => {let schemaif (req.url === '/login' || req.url === '/register') {schema = Joi.object(reg_login_schema)} else if (req.url === '/userinfo' && req.method === 'POST') {schema = Joi.object(update_userinfo_schema)} else if (req.url === '/updatepwd') {schema = Joi.object(update_password_schema)} else if (req.url === '/update/avatar') {schema = Joi.object(update_avatar_schema)}const userInfo = req.body ? req.body : {}const { error } = schema.validate(userInfo)if (error) return res.cc(error)next()
}
  1. /router/userinfo.js 模块中,导入验证数据合法性的中间件:
// 更新用户邮箱路由
router.post('/update/avatar', joiExpress, userinfo_handler.updateAvatar)

老规矩,测试一下

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

  1. 定义待执行的 SQL 语句:
const sql = `update ${table.usersTable} set user_pic=? where id=?`
  1. 调用 db.query() 执行 SQL 语句并传参:
db.query(sql, [req.body.avatar, req.user.id], (err, results) => {if (err) return res.cc(err)if (results.affectedRows !== 1) return res.cc('更新用户头像失败,请稍后重试')res.cc('更新头像成功!', 0)})

【node.js后台api项目】(七)更新用户头像接口相关推荐

  1. 【node.js后台api项目】(二)实现注册功能

    [node.js后台api项目](二)实现注册功能 一.实现思路 二.项目目录 三.代码编写 1.基本代码 2.数据合法性校验 3.注册路由处理函数 4.密码加密 一.实现思路 注册功能简单来说就是提 ...

  2. Node开发后台API接口项目

    文章目录 1.初始化项目 1-1.创建项目 1-2.配置cors 1-3.配置解析表单数据的中间件 2.初始化路由 2-1.初始化路由相关的文件夹 2-2.初始化用户路由模块 2-3.抽离路由函数中的 ...

  3. 十个书写Node.js REST API的最佳实践(上)

    收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...

  4. api怎么写_使用Node.js原生API写一个web服务器

    Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...

  5. Vanilla Node.js REST API示例

    A Vanilla Node.js REST API without Frameworks such us Express | Engineering Education (EngEd) Progra ...

  6. Node.js Express+Mongodb 项目实战

    Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很 ...

  7. node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。

    node.js 学习笔记 node.js服务端笔记文档学会写接口,path.包.模块化.fs.express.中间件.JWT.开发模式.cors. gitee:代码接口笔记 1什么是node.js n ...

  8. 亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像)

    亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像) 大噶好,我们继续延续上一章,学习如何使用OSS存放用户头像代码示例; 在application.propert ...

  9. Node.js零基础自学(持续更新中)

    1. Node.js时基于Chrome V8 引擎的JavaScript运行环境.官网:Node.jsNode.js® is a JavaScript runtime built on Chrome' ...

最新文章

  1. 如何定制一款12306抢票浏览器——启动“人”线程
  2. LCS最长公共子序列和LIS最长上升子序列——例题剖析
  3. 大数据安全“脆弱性”凸显 防护成重要课题
  4. 微软摊开 AI 高分作业,在线求抄
  5. 性能提升2.58倍!阿里最快KV存储引擎揭秘
  6. 正则表达式-我在学习过程中研究过的
  7. 使用jOOQ和JavaFX将SQL数据转换为图表
  8. ols线性回归_普通最小二乘[OLS]方法使用于机器学习的简单线性回归变得容易
  9. jquery添加未来元素时,其绑定事件不起作用解决办法
  10. Java_Date_01_判断两个时间相差的天数
  11. css修改span位置_简历完善,CSS布局与定位,笔记
  12. Linux开机启动分析与系统配置
  13. fastscript增加三方控件
  14. 设计师不可错过的2022年设计类网站大搜集,素材 教程 案例 全都有
  15. (含代码)基于51单片机电子密码锁设计
  16. VScode 英文翻译成中文插件(英语差的福音)
  17. 关于win7 环境下安装docker容器的步骤 以及过程中的问题解决
  18. 克隆硬盘后进不去系统_克隆硬盘后进不去系统_如何将硬盘克隆到较小的固态硬盘?...
  19. 【JZOJ 4623】搬运干草捆
  20. sql注入登陆(菜鸟级)

热门文章

  1. Laravel5.5开发规范 [ 个人总结 ]
  2. 机器学习-定序回归及python实现
  3. 组建计算机网络目的三个,计算机网络实习目的
  4. 今天开始看计算机程序设计艺术
  5. zigbee 休眠与唤醒
  6. 获取本周开始和结束时间
  7. MySql java.sql.SQLException: sql injection violation, part alway false condition not allow异常简单处理方式
  8. Java 文件压缩工具类(支持多级目录压缩)
  9. R6034错误,C Runtime Error
  10. 这篇 TCP 、UDP 绝了!