【node.js后台api项目】(七)更新用户头像接口
【node.js后台api项目】(七)更新用户头像接口
- 1、接口相关信息
- 2、 定义路由和处理函数
- 3、验证提交的数据
- 4、实现更新用户基本信息功能
1、接口相关信息
- 路由:
/my/update/avatar
- method: post
- 请求头需要携带
Authorization
字段进行身份认证 - 请求体
- avatar: 新头像,base64格式的字符串
2、 定义路由和处理函数
- 在
/router/userinfo.js
模块中,新增 更新用户基本信息 的路由:
// 更新用户邮箱路由
router.post('/update/avatar', userinfo_handler.updateAvatar)
- 在
/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
}
- 对
/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()
}
- 在
/router/userinfo.js
模块中,导入验证数据合法性的中间件:
// 更新用户邮箱路由
router.post('/update/avatar', joiExpress, userinfo_handler.updateAvatar)
老规矩,测试一下
4、实现更新用户基本信息功能
- 定义待执行的 SQL 语句:
const sql = `update ${table.usersTable} set user_pic=? where id=?`
- 调用 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项目】(七)更新用户头像接口相关推荐
- 【node.js后台api项目】(二)实现注册功能
[node.js后台api项目](二)实现注册功能 一.实现思路 二.项目目录 三.代码编写 1.基本代码 2.数据合法性校验 3.注册路由处理函数 4.密码加密 一.实现思路 注册功能简单来说就是提 ...
- Node开发后台API接口项目
文章目录 1.初始化项目 1-1.创建项目 1-2.配置cors 1-3.配置解析表单数据的中间件 2.初始化路由 2-1.初始化路由相关的文件夹 2-2.初始化用户路由模块 2-3.抽离路由函数中的 ...
- 十个书写Node.js REST API的最佳实践(上)
收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...
- api怎么写_使用Node.js原生API写一个web服务器
Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...
- Vanilla Node.js REST API示例
A Vanilla Node.js REST API without Frameworks such us Express | Engineering Education (EngEd) Progra ...
- Node.js Express+Mongodb 项目实战
Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很 ...
- node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。
node.js 学习笔记 node.js服务端笔记文档学会写接口,path.包.模块化.fs.express.中间件.JWT.开发模式.cors. gitee:代码接口笔记 1什么是node.js n ...
- 亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像)
亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像) 大噶好,我们继续延续上一章,学习如何使用OSS存放用户头像代码示例; 在application.propert ...
- Node.js零基础自学(持续更新中)
1. Node.js时基于Chrome V8 引擎的JavaScript运行环境.官网:Node.jsNode.js® is a JavaScript runtime built on Chrome' ...
最新文章
- 如何定制一款12306抢票浏览器——启动“人”线程
- LCS最长公共子序列和LIS最长上升子序列——例题剖析
- 大数据安全“脆弱性”凸显 防护成重要课题
- 微软摊开 AI 高分作业,在线求抄
- 性能提升2.58倍!阿里最快KV存储引擎揭秘
- 正则表达式-我在学习过程中研究过的
- 使用jOOQ和JavaFX将SQL数据转换为图表
- ols线性回归_普通最小二乘[OLS]方法使用于机器学习的简单线性回归变得容易
- jquery添加未来元素时,其绑定事件不起作用解决办法
- Java_Date_01_判断两个时间相差的天数
- css修改span位置_简历完善,CSS布局与定位,笔记
- Linux开机启动分析与系统配置
- fastscript增加三方控件
- 设计师不可错过的2022年设计类网站大搜集,素材 教程 案例 全都有
- (含代码)基于51单片机电子密码锁设计
- VScode 英文翻译成中文插件(英语差的福音)
- 关于win7 环境下安装docker容器的步骤 以及过程中的问题解决
- 克隆硬盘后进不去系统_克隆硬盘后进不去系统_如何将硬盘克隆到较小的固态硬盘?...
- 【JZOJ 4623】搬运干草捆
- sql注入登陆(菜鸟级)
热门文章
- Laravel5.5开发规范 [ 个人总结 ]
- 机器学习-定序回归及python实现
- 组建计算机网络目的三个,计算机网络实习目的
- 今天开始看计算机程序设计艺术
- zigbee 休眠与唤醒
- 获取本周开始和结束时间
- MySql java.sql.SQLException: sql injection violation, part alway false condition not allow异常简单处理方式
- Java 文件压缩工具类(支持多级目录压缩)
- R6034错误,C Runtime Error
- 这篇 TCP 、UDP 绝了!