Slog49_支配vue框架初阶项目之博客网站-单页-客户端(浏览器)更新头像1

news/2024/4/27 15:46:42/文章来源:https://blog.csdn.net/weixin_34258838/article/details/88746893
  • ArthurSlog
  • SLog-49
  • Year·1
  • Guangzhou·China
  • Aug 26th 2018

关注微信公众号“ArthurSlog”

  • GitHub
  • 掘金主页
  • 简书主页
  • segmentfault

100个同样努力且水平差不多的人 其中有一个无私的教你 牺牲了他的时间成本和机会成本 其他的99个的水平和经济会在这段时间内超过他 慢慢的 他就被淘汰了 这样的人也就变少了


开发环境MacOS(High Sierra 10.13.5)

需要的信息和信息源:

  • 统一资源定位符(URL)
  • XMLHttpRequest

开始编码

  • 首先,先理一下思路:
1.用户登陆、客户端(浏览器)登陆 ->
2.向服务端发送一条信息,获取用户数据 ->
3.服务端处理客户端发来的数据,返回相应的数据 ->
4.客户端(浏览器)接收返回的数据 ->
5.客户端(浏览器)解析返回的数据 ->
6.客户端(浏览器)根据解析好的数据,进行业务处理
(将处理好的数据路由到相应的前端的逻辑功能) ->
7.客户端(浏览器)渲染页面
  • 为了实现 “更新头像” 的功能,我们可以在服务端进行更新,让服务端在接收到图片之后,覆盖掉 client/image 路径下的图片
  • 当你重新登陆的时候,因为原先的图片已经被覆盖了,所以现在登陆显示的是新的头像

server/index.js

const serve = require('koa-static');
const Koa = require('koa');
const app = new Koa();
const Router = require('koa-router');
const router = new Router();
const fs = require("fs");
const koaBody = require('koa-body');// $ GET /package.json
app.use(serve('../client'));//
router.get('/signin', async (ctx) => {var mysql = require('mysql');var connection = mysql.createConnection({host: 'localhost',user: 'root',password: '88888888',database: 'my_db'});connection.connect(function (err) {if (err) {console.error('error connecting: ' + err.stack);return;}console.log('connected as id ' + connection.threadId);});var response = {"name": ctx.query.name,"password": ctx.query.password};var addSql = 'SELECT * FROM ArthurSlogAccount WHERE AccountName=?';var addSqlParams = [response.name];var datas = await new Promise((resolve, reject) => {connection.query(addSql, addSqlParams, function (err, result) {if (err) {reject(err);console.log('[SELECT ERROR] - ', err.message);return;}if (result[0].Password == response.password) {resolve(result[0]);console.log('Welcome~ SingIn Successul ^_^' + '\\' + 'Level: ' + result[0].Level + ' Houses: ' + result[0].Houses);}if (result[0].Password != response.password) {reject('SingIn Fault ^_^!');console.log('SingIn Fault ^_^!');}});});if (datas) {ctx.body = datas;}connection.end();
});//
router.get('/signup', async (ctx) => {var mysql = require('mysql');var connection = mysql.createConnection({host: 'localhost',user: 'root',password: '88888888',database: 'my_db'});connection.connect(function (err) {if (err) {console.error('error connecting: ' + err.stack);return;}console.log('connected as id ' + connection.threadId);});var response = {"name": ctx.query.name,"password": ctx.query.password,"firstname": ctx.query.firstname,"lastname": ctx.query.lastname,"birthday": ctx.query.birthday,"sex": ctx.query.sex,"age": ctx.query.age,"wechart": ctx.query.wechart,"qq": ctx.query.qq,"email": ctx.query.email,"contury": ctx.query.contury,"address": ctx.query.address,"phone": ctx.query.phone,"websize": ctx.query.websize,"github": ctx.query.github,"bio": ctx.query.bio};var addSql = 'INSERT INTO ArthurSlogAccount(AccountName, Password, Firstname, Lastname, Birthday, Sex, Age, Wechart, Qq, Email, Contury, Address, Phone, Websize, Github, Bio) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';var addSqlParams = [response.name, response.password, response.firstname, response.lastname, response.birthday, response.sex, response.age, response.wechart, response.qq, response.email, response.contury, response.address, response.phone, response.websize, response.github, response.bio];ctx.body = await new Promise((resolve, reject) => {connection.query(addSql, addSqlParams, function (err, result) {if (err) {reject(err);console.log('[INSERT ERROR] - ', err.message);return;}resolve('Singup Successful!');});});connection.end();
});router.post('/uploadfiles', koaBody({multipart: true}), async (ctx) => {console.log('fields: ', ctx.request.fields);console.log('files: ', ctx.request.files);const file = ctx.request.files.myFile;const reader = fs.createReadStream(file.path);const stream = fs.createWriteStream('../client/image/ArthurSlog_icon' + '.jpg');reader.pipe(stream);
});app.use(router.routes());app.listen(3000);console.log('listening on port 3000');
  • 更新部分:

server/index.js

const stream = fs.createWriteStream('../client/image/ArthurSlog_icon' + '.jpg');
  • “../” 的意思是返回上一级目录,因为在这里服务端的目录为 server/index.js,所以需要先返回上一层目录,在进入 client/image
  • 结果是 “路径+文件名+文件后缀”,即 ‘../client/image/ArthurSlog_icon.jpg’
  • 同时,我们需要更新 html文件 里头像的路径

client/app.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><link rel="stylesheet" type="text/css" href="./css/style.css"><!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><title>signin_ArthurSlog</title>
</head><body><div id="signup-container"><template class="container" v-if="pagestate === '0'"><div>This is index's page by ArthurSlog</div><br><button v-on:click="signin_index">Signin</button><br><button v-on:click="signup_index">Signup</button></template><template id="Signin" v-else-if="pagestate === '1'"><div>This is signin's page by ArthurSlog</div><p>Singin</p><form id="form1" v-on:submit.prevent="signin"><br><div>Account: {{ name_signin }}<br><input type="text" v-model="name_signin" placeholder="username"></div><br><br><div>Password: {{ password_signin }}<br><input type="text" v-model="password_signin" placeholder="password"></div><br><input type="submit" value="登陆"></form><br><button v-on:click="return_index">ReturnIndex</button></template><template id="Signup" v-else-if="pagestate === '2'"><div>This is signup's page by ArthurSlog</div><p>Singup</p><form id="form2" v-on:submit.prevent="addUser"><br><div>Account: {{ name }}<br><input type="text" v-model="name" placeholder="username"></div><br><br><div>Password: {{ password }}<br><input type="text" v-model="password" placeholder="password"></div><br><br><div>Again Password: {{ repassword }}<br><input type="text" v-model="repassword" placeholder="repassword"></div><br><br><div>First Name: {{ firstname }}<br><input type="text" v-model="firstname" placeholder="firstname"></div><br><br><div>Last Name: {{ lastname }}<br><input type="text" v-model="lastname" placeholder="lastname"></div><br><br><div>Birthday: {{ birthday }}<br><input type="text" v-model="birthday" placeholder="2000/08/08"></div><br><br><div><span>Sex: {{ currentSex }}</span><br><input type="radio" id="sex" value="male" v-model="currentSex"><label for="sex">male</label><br><input type="radio" id="sex" value="female" v-model="currentSex"><label for="sex">female</label></div><br><br><div><span>Age: {{ currentAge }}</span><br><select v-model="currentAge" id="age"><option disabled value="">Select</option><option v-for="age in ages">{{ age }}</option></select></div><br><br><div>Wechart: {{ wechart }}<br><input type="text" v-model="wechart" placeholder="wechart's name"></div><br><br><div>QQ: {{ qq }}<br><input type="text" v-model="qq" placeholder="12345678"></div><br><br><div>Email: {{ email }}<br><input type="text" v-model="email" placeholder="12345678@qq.com"></div><br><br><div>Contury: {{ contury }}<br><input type="text" v-model="contury" placeholder="China"></div><br><br><div>Address: {{ address }}<br><input type="text" v-model="address" placeholder="Guangzhou"></div><br><br><div>Phone: {{ phone }}<br><input type="text" v-model="phone" placeholder="138********"></div><br><br><div>Websize: {{ websize }}<br><input type="text" v-model="websize" placeholder="xxx.com"></div><br><br><div>Github: {{ github }}<br><input type="text" v-model="github" placeholder="Github's URl"></div><br><br><div>Bio: {{ bio }}<br><input type="text" v-model="bio" placeholder="This is the world~"></div><br><br><input type="submit" value="完成注册"></form><button v-on:click="addUser">addUser</button><br><button v-on:click="return_index">ReturnIndex</button><br></template><template id="returnResult" v-else-if="pagestate === '3'"><div><img id="ArthurSlog_icon" src="/image/ArthurSlog_icon.jpg" alt="ArthurSlog_icon" /></div><div><div>Uploading {{ image }} files...</div><br><input type="file" v-on:change="filesChange"><br><button v-on:click="uploadfiles">uploadfiles</button></div><div id="signinResult"><div v-for="(value, key) in commits">{{ key }}: {{ value }}</div></div></template></div><script src="./js/signup.js"></script>
</body></html>
  • 更新部分:

client/app.html

<div><img id="ArthurSlog_icon" src="/image/ArthurSlog_icon.jpg" alt="ArthurSlog_icon" />
</div>
  • 至此,我们实现了更新头像的功能。

欢迎关注我的微信公众号 ArthurSlog

关注微信公众号“ArthurSlog”

如果你喜欢我的文章 欢迎点赞 留言

谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_781307.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单网站侧边悬浮图片带关闭按钮广告代码

邯郸生活网www.mlhd.org 最近在放一个侧边的广告&#xff0c;网上看很多代码都很复杂&#xff0c;其实有一款比较简单的代码&#xff0c;也不需要调用更多的文件就可以&#xff0c;还带关闭按钮&#xff0c;足以满足将图片广告放入网站的侧边&#xff0c;左侧右侧均可。代码如下…

Linux中什么是动态网站环境及如何部署

Linux中什么是动态网站环境及如何部署当谈论起网站时&#xff0c;我们可能听说过静态和动态这两个词&#xff0c;但却不知道它们的含义&#xff0c;或者从字面意思了解一些却不知道它们的区别。这一切可以追溯到网站和网络应用程序&#xff0c;Web应用程序是一个网站&#xff0…

html错误16,SEO常见的16个错误

原标题&#xff1a;SEO常见的16个错误指出错误的关键字这是很多人犯的一个错误&#xff0c;更糟的是&#xff0c;即使是有经验的SEO专家也是如此。人们选择的关键词是他们的网站描述&#xff0c;但普通用户可能不会搜索他们。例如&#xff0c;如果你有一个关系网站&#xff0c;…

CISSP 认证的 12 部优秀 CISSP 书籍和学习指南+学习网站

目录 什么是CISSP考试&#xff1f; 准备 CISSP 认证考试的提示 我应该花多少时间来准备 CISSP 考试&#xff1f; 12本推荐的优秀书籍 12. CISSP 简单指南 11. CISSP 3 周&#xff1a;CISSP DIY 手册 10. ExamFOCUS CISSP考试学习笔记 9. CISSP 傻瓜 8. CISSP 第十一课&…

社交网站如何使用大数据:是好、是坏还是难看的

您是否曾在 社交网站上看过一个视频&#xff0c;其中显示了帖子、喜欢或图像的“flashback闪回”——就像您可能在生日或与某人成为朋友的周年纪念日看到的那样&#xff1f; 如果是这样&#xff0c;您已经看到了 社交网站 如何使用大数据的示例。 麦肯锡公司的一份报告指出&am…

2022年学习数据科学的18个网站

数据科学是近十年来最火爆的工作&#xff0c;很多人想转行做数据科学家&#xff0c;但自己又缺这方面的知识&#xff0c;想要学习&#xff0c;却没有学习的渠道。 今天&#xff0c;我给大家分享18个在线学习数据科学的网站&#xff0c;通过这些网站&#xff0c;大家不仅能够学…

SEO的5大关键指标:排名+流量+会话+停留时长+跳出率

从搜索引擎获取流量&#xff0c;是每家企业的共识&#xff0c;但怎样能够获得更多更高质量更持久的免费流量呢&#xff1f;答案是搜索引擎优化&#xff0c;即SEO。 一份好的SEO报告可以反映出企业当前状态以及未来的发展趋势。SEO报告上的数据&#xff0c;可以帮助我们做工作调…

IT行业常用网站与平台汇总(持续更新...)

文章目录前言一、知乎二、CSDN三、掘金网四、Hacker News五、推酷网六、互联网的一些事七、美国项目管理协会总结前言 IT行业常用网站与平台汇总&#xff0c;供大家使用。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、知乎 知乎网址 是一个大…

最全整理:项目管理人超实用的自学网站!

在一个大问题下可以看到各行各业的高质量自学网站&#xff0c;感觉很不错哈 作为一名有多年项目管理经验的过来人&#xff0c;我就分享一些自己行业内的自学网站吧&#xff0c;其实对所职场人和管理者都是通用的。 有句俗话说的好&#xff0c;「工欲善其事&#xff0c;必先利…

python制作购物网站_python实现简单购物商城

本文为大家分享了购物商城小程序&#xff0c;供大家参考&#xff0c;具体内容如下 软件版本&#xff1a;python3.x 功能&#xff1a;实现简单购物商城 1.允许用户选择购买多少件 2.允许多用户登录&#xff0c;下一次登录后&#xff0c;继续按上次的余额继续购买 3. 允许用户查看…

java电商商品搜索_电商网站上的搜索功能是如何实现的?

今天是刘小爱自学Java的第159天。感谢你的观看&#xff0c;谢谢你。学习计划安排如下&#xff1a;索引库本质上和数据库类似&#xff0c;也是存储数据的&#xff0c;既然如此自然也会有增删改查。那么这个索引库到底有何特别应用呢&#xff1f;索引库的特别之处在于它的查询&am…

python爬虫爬取网站文章,python爬虫入门初级实践之爬取网站文章及阅读量-基于BeautifulSoup...

1.目标爬虫实现的目标&#xff1a;输入&#xff1a;测试窝主页链接输出&#xff1a;爬取该网站所有页面的测试相关前言资讯和技术文章的文章链接、标题及阅读量、点赞数&#xff0c;发表日期2.爬虫Beautifulsoup4使用总结Beautifulsoup预备知识Beautifulsoup4官方文档如下&…

高级项目经理推荐:19个超实用的自学网站

最近&#xff0c;有学员私信问&#xff1a;“能否推荐一些适合项目经理学习或交流的网站&#xff1f;”当然没有问题。 信息化时代&#xff0c;很多人都会通过学习网站来提升自己。但这么多网站&#xff0c;到底哪些才是最适合你呢&#xff1f;本篇文章为大家总结了&#xff0…

nicetool好工具_6个功能超多的在线工具网站,即开即用!建议都收藏

在我们的日常工作学习中&#xff0c;总会夹杂着一些小的需求&#xff0c;比如说媒体文件太大&#xff0c;需要压缩一下才能上传&#xff1b;下载工具不支持某种格式的链接&#xff0c;需要转换&#xff1b;看到B站或者抖音有个视频很喜欢&#xff0c;但是下载有水印。诸如此类的…

seo代码优化工具_seo关键词该如何筛选,网站优化如何更有技巧的去做好

seo关键词该如何筛选SEO关键词如何筛选关键词如何筛选我给大家分享了如何做好SEO&#xff0c; 同时也给大家拓展了常用的SEO术语&#xff0c;相信大家都有所收获吧&#xff0c;今天小编就给大家说说如何分析筛选出适合网站优化的关键词?根据之前文章的介绍&#xff0c;我们有了…

read.html5.qq.com,如何通过第三方QQ登录网站首页

QQ登录&#xff0c;就是我们所说的第三方登录&#xff0c;是指用户可以不在本项目中输入密码&#xff0c;而直接通过第三方的验证&#xff0c;成功登录本项目若想实现QQ登录&#xff0c;需要成为QQ互联的开发者&#xff0c;审核通过才可实现。注册方法参考链接http://wiki.conn…

网站服务器的10G内存,10G网站空间

10G网站空间 内容精选换一换云速建站各个版本对于流量都不做任何限制&#xff0c;可以无限使用。客户访问和上传下载文档图片都会产生流量&#xff0c;流量为上下行量的总和。云速建站架构包含缓存机制&#xff0c;只有第一次访问的时候&#xff0c;图片下载到本地才会占有流量…

ASP.NET MVC4网站搭建与发布【最新】

ASP.NET MVC4网站搭建与发布 一些往事 2015年&#xff0c;仅仅大二的我怀着一颗创业之心&#xff0c;加入了常熟派英特&#xff0c;成为阳光职场平台的创始之一&#xff0c;并肩负了公司技术部的大梁&#xff0c;当时阳光职场正在从线下服务向互联网化升级过渡。 距我离开自…

使用Github+Hexo搭建个人博客 - Hexo建站(一)

一、博客搭建 1.1.1 安装nodejs 官网: https://nodejs.org/en/ 下载好后, 打开一直下一步即可. 查看是否安装成功 $ node -v v12.10.01.1.2 安装Git Windows: 下载并安装 https://git-scm.com/download/win 1.1.2.1 git设置 配置推送的用户名和邮箱 $ git config --glob…

Github搭建的博客更改为自定义域名 - Hexo建站(二)

本文主要目的: 创建Githubs name.github.io网站后, 想改为自己的域名 更改为自定义域名 1.购买自己想要的域名 2.域名备案 3.域名解析 GitHub Page最新域名解析地址: https://help.github.com/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github…