Vue+koa2开发一款全栈小程序(6.个人中心)
1.用户信息的获取和展示
1.初始化数据库
cd到server目录下,执行
node tools/initdb.js
登录mysql控制界面,查看初始化以后生成的表
show databases;
use cauth;
show tables;
如果报错(往往因为mysql的版本8.0什么的,加密方式导致初始化脚本报错),解决办法
进入mysql
alter user 'root'@'localhost' identified with mysql_native_password by '数据库密码’ flush privileges;
2.安装微信提供的sdk
cd到mydemo目录下,执行
cnpm install wafer2-client-sdk --save
腾讯wafer2-client-sdk在GitHub上的文档地址
https://github.com/tencentyun/wafer2-client-sdk
在mydemo/src下的config.js中,配置loginUrl
// 配置项
const host = 'http://localhost:5757'
const config = {
host,
loginUrl:`${host}/weapp/login`
}
export default config
在src/pages/me目录下的index.vue中,写登录代码
<template>
<div>
个人中心页面 <button open-type="getUserInfo" lang="zh_CN" @getuserinfo="doLogin">获取用户信息</button>
</div>
</template>
<script>
import qcloud from 'wafer2-client-sdk'
import config from '@/config.js' export default {
methods: {
doLogin: function (e) {
qcloud.setLoginUrl(config.loginUrl)
qcloud.login({
success: function (userInfo) {
console.log('登录成功', userInfo)
},
fail: function (err) {
console.log('登录失败', err)
}
})
}
} }
</script>
<style> </style>
启动server和mydemo项目,打开微信开发者工具,点击获取用户信息

3.数据缓存
实现功能一:如果没登录,点击按钮完成微信登录,会有登录成功的图片提示
实现功能二:登录成功后,留下登录信息,下次访问时不显示登录按钮
1.src/pages/me/index.vue
import config from '@/config.js'
import { showSuccess } from '@/until.js';
export default {
data(){
return{
user:''
}
},
methods: {
doLogin: function (e) {
qcloud.setLoginUrl(config.loginUrl)
var _this=this//在success回调里面 this.user指向的已经不是data里的user了
qcloud.login({
success: function (userInfo) {
console.log('登录成功', userInfo);
showSuccess('登陆成功')//显示登录成功提示图标
wx.setStorageSync('userinfo', userInfo)
_this.user=wx.getStorageSync('userinfo')
},
fail: function (err) {
console.log('登录失败', err)
}
})
}
},
created(){
this.user=wx.getStorageSync('userinfo')
console.log(321,this.user)
}
}
</script>
<style>
</style>
2.src/until.js内增加代码
export function showSuccess(text){
wx.showToast({
title:text,
icon:'success'
})
}
2.个人中心页面开发
1.安装scss的依赖
cnpm install sass-loader --save-dev
cnpm install node-sass --save-dev
2.在个人中心页面显示头像和微信名
1.src/pages/me/index.vue
<template>
<div class="container">
<button v-if="!user" open-type="getUserInfo" lang="zh_CN" @getuserinfo="doLogin">获取用户信息</button>
<div class="userinfo">
<img :src="user.avatarUrl" alt="">
<p>{{user.nickName}}</p>
</div>
<button class="btn">添加图书</button>
</div>
</template>
<script>
import qcloud from 'wafer2-client-sdk'
import config from '@/config.js' import { showSuccess } from '@/until.js'; export default {
data(){
return{
user:''
}
},
methods: {
doLogin: function (e) {
qcloud.setLoginUrl(config.loginUrl)
var _this=this//在success回调里面 this.user指向的已经不是data里的user了
qcloud.login({
success: function (userInfo) {
console.log('登录成功', userInfo); showSuccess('登陆成功')//显示登录成功提示图标
wx.setStorageSync('userinfo', userInfo)
_this.user=wx.getStorageSync('userinfo')
},
fail: function (err) {
console.log('登录失败', err)
}
}) }
},
created(){
this.user=wx.getStorageSync('userinfo')
console.log(321,this.user)
} }
</script>
<style lang='scss'>
.container{
padding: 0 30rpx;
.userinfo{
margin-top: 100rpx;
text-align: center;
img{
width: 150rpx;
height: 150rpx;
margin: 20rpx;
border-radius: 50%;
} }
}
</style>
2.在src/App.vue中,对btn的样式做全局定义,在<style>标签中添加代码
.btn{
color: white;
background: #EA5A49;
margin-bottom: 10px;
padding-left: 15px;
padding-right: 15px;
border-radius: 2px;
font-size: 16px;
line-height: 40px;
height: 40px;
width: 100%;
}
.btn:active{
background: #FA5A49;
}
运行项目,登录后的效果图

3.扫码功能开发
扫码功能的官方api
wx.scanCode({
success: (res) => {
console.log(res)
}
})
src/pages/me/index.vue内代码
<template>
<div class="container">
<button v-if="!user" open-type="getUserInfo" lang="zh_CN" @getuserinfo="doLogin">获取用户信息</button>
<div class="userinfo">
<img :src="user.avatarUrl" alt="">
<p>{{user.nickName}}</p>
</div>
<button @click="scanBook" class="btn">添加图书</button>
</div>
</template>
<script>
import qcloud from 'wafer2-client-sdk'
import config from '@/config.js' import { showSuccess } from '@/until.js'; export default {
data(){
return{
user:''
}
},
methods: {
doLogin: function (e) {
qcloud.setLoginUrl(config.loginUrl)
var _this=this//在success回调里面 this.user指向的已经不是data里的user了
qcloud.login({
success: function (userInfo) {
console.log('登录成功', userInfo); showSuccess('登陆成功')//显示登录成功提示图标
wx.setStorageSync('userinfo', userInfo)
_this.user=wx.getStorageSync('userinfo')
},
fail: function (err) {
console.log('登录失败', err)
}
})
}, scanBook(){
wx.scanCode({
success: (res) => {
console.log(res)
}
})
} },
created(){
this.user=wx.getStorageSync('userinfo')
console.log(321,this.user)
} }
</script>
<style lang='scss'>
.container{
padding: 0 30rpx;
.userinfo{
margin-top: 100rpx;
text-align: center;
img{
width: 150rpx;
height: 150rpx;
margin: 20rpx;
border-radius: 50%;
} }
}
</style>
4.今年过了多少天组件开发
1.在src/components目录下新建YearProgress.vue
<template>
<div class="progressbar"> <progress :percent="percent" activeColor='#EA5A49'></progress>
<p>{{year}}已经过去了{{days}}天,{{percent}}%</p>
</div>
</template> <script>
export default {
methods:{
isLeapYear(){
const year=new Date().getFullYear()
if(year%400===0){
return true
}else if(year%4===0&&year%100!==0){
return true
}else{
return false
} },
getDayOfYead(){
return this.isLeapYear()?366:365
}
},
computed:{
year(){
return new Date().getFullYear()
},
days(){
let start=new Date()
start.setMonth(0)
start.setDate(1)
//start就是今年第一天
//今天的时间戳 减去今天第一天的时间戳
let offset=new Date().getTime()-start.getTime()
return parseInt(offset/1000/60/60/24)+1
},
percent(){
return (this.days*100/this.getDayOfYead()).toFixed(1)
}
} }
</script>
<style lang='scss'>
.progressbar{
text-align: center;
margin-top:10px;
margin-bottom: 40px;
width: 100%;
progress{
margin-bottom: 10px;
}
}
</style>
2. 在src/pages/me/index.vue中引用

3.效果图

5.登录逻辑的完善
me/index.vue
<template>
<div class="container"> <div class="userinfo">
<img :src="avatarUrl" alt="">
<button v-if="!user" open-type="getUserInfo" lang="zh_CN" @getuserinfo="doLogin">点击登录</button>
<p>{{user.nickName}}</p>
</div>
<YearProgress></YearProgress>
<button @click="scanBook" class="btn">添加图书</button>
</div>
</template>
<script>
import qcloud from 'wafer2-client-sdk'
import config from '@/config.js' import { showSuccess } from '@/until.js'; import YearProgress from '@/components/YearProgress' export default {
components:{
YearProgress
},
data(){
return{
user:'',
avatarUrl:'../../../static/img/unlogin.png',
}
},
methods: {
doLogin: function (e) {
qcloud.setLoginUrl(config.loginUrl)
var _this=this//在success回调里面 this.user指向的已经不是data里的user了
qcloud.login({
success: function (userInfo) {
console.log('登录成功', userInfo); showSuccess('登陆成功')//显示登录成功提示图标
wx.setStorageSync('userinfo', userInfo)
_this.user=wx.getStorageSync('userinfo')
_this.avatarUrl=_this.user.avatarUrl
},
fail: function (err) {
console.log('登录失败', err)
}
})
}, scanBook(){
wx.scanCode({
success: (res) => {
console.log(res)
}
})
} },
created(){
this.user=wx.getStorageSync('userinfo')
if(this.user){
this.avatarUrl=this.user.avatarUrl
this.nickName=this.user.nickName
}
console.log(321,this.user)
} }
</script>
<style lang='scss'>
.container{
padding: 0 30rpx;
.userinfo{
margin-top: 100rpx;
text-align: center;
img{
width: 150rpx;
height: 150rpx;
margin: 20rpx;
border-radius: 50%;
} }
}
</style>
6.eslint格式化代码
打开cmd,cd到mydemo下,执行
npm run lint
报错

去修改
到App.vue下,将代码
import {get} from './until'
import config from './config'
删掉,再运行
npm run lint
发现没再报错,代码矫正完成。
Vue+koa2开发一款全栈小程序(6.个人中心)的更多相关文章
- Vue+koa2开发一款全栈小程序(1.课程介绍+2.ES6入门)
1.课程介绍 1.课程概述 1.做什么? Vue+koa2开发一款全栈小程序 2.哪些功能? 个人中心.图书列表.图书详情.图书评论.个人评论列表 3.技术栈 小程序.Vue.js.koa2.koa- ...
- Vue+koa2开发一款全栈小程序(5.服务端环境搭建和项目初始化)
1.微信公众平台小程序关联腾讯云 腾讯云的开发环境是给免费的一个后台,但是只能够用于开发,如果用于生产是需要花钱的,我们先用开发环境吧 1.用小程序开发邮箱账号登录微信公众平台 2.[设置]→[开发者 ...
- Vue+koa2开发一款全栈小程序(3.vue入门、Mpvue入门)
1.Vue-cli 1.新建一个vue项目 打开cmd 官方命令行工具 npm install -g vue-cli //安装脚手架 cd到你想要存放demo的目录下,然后 vue init webp ...
- Vue+koa2开发一款全栈小程序(9.图书详情页)
1.获取图书详情 1.修改server/controllers/bookdetail.js为 const {mysql}=require('../qcloud') module.exports=asy ...
- Vue+koa2开发一款全栈小程序(8.图书列表页)
1.图书列表页获取数据 1.在server/routes/index.js中新增路由 router.get('/booklist',controllers.booklist) 2.在server/co ...
- Vue+koa2开发一款全栈小程序(7.图书录入功能)
1.图书录入功能 1.获取图书信息 1.在mydemo/src/until.js中封装工具函数post和get // 工具函数 import config from './config' // htt ...
- Vue+koa2开发一款全栈小程序(4.Koa入门)
1.Koa是什么? 基于nodejs平台的下一代web开发框架 1.Express原班人马打造,更精简 2.Async+await处理异步 3.洋葱圈型的中间件机制 新建一个koa项目 1.打开cmd ...
- 微信小程序云开发-从0打造云音乐全栈小程序
第1章 首门小程序“云开发”课程,你值得学习本章主要介绍什么是小程序云开发以及学习云开发的重要性,并介绍项目的整体架构,真机演示项目功能,详细介绍整体课程安排.课程适用人群以及需要掌握的前置知识.通过 ...
- 从零开发一款自己的小程序UI组件库(一)
写在前面:有开发过小程序的朋友肯定知道组件化开发的特性,高内聚与低耦合.使用已有的UI组件库,诸如:vantUI-weapp.minUI-weapp等UI组件库的诞生使我们的开发速度大大的加快,丰富的 ...
随机推荐
- Linux下创建桌面快捷方式
建立一个文本文件,文件名必须以.desktop结尾,.desktop前面的作为快捷方式的名称 添加如下内容 [Desktop Entry]Encoding=UTF-8Name=PostmanExec= ...
- ES6使用的一些方法
查找数组中符合条件的所有记录 var list=[ {id:1,name:"张三"}, {id:2,name:"李四"}, {id:3,name:"王 ...
- centosFTP服务搭建及权限配置
引用一个其他大佬对vsftpd的描述: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点. vsftpd 是一个 UNIX 类操作系统上运行的服务器的 ...
- GMM算法的matlab程序
GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- tcp、udp、ip、icmp报文格式分析
TCP .UDP .IP. ICMP协议报文格式分析 Tcp报文格式: Wireshark抓包如图: 源端口/目的端口(16bit): 在TCP报文中包涵了源端口/目的端口,源端口标识了发送进程,目的 ...
- hbase 迁库移库步骤
1 将数据导出 hbase org.apache.hadoop.hbase.mapreduce.Export t_zyzx_grzyfwtjxxb /hbase/data_backup/2018103 ...
- solr 7.7 搭建和搜索
最近做了个solr搜索的demo, 用的是solr7.7,之前网上好多文章搭建solr都是5.5+tomcat.. 自己摆弄了下,发现solr7.7和5.5 的部分文件夹有些改动,没有深究原理也就没有 ...
- docker 小技巧 列出所有容器的IP地址
命令如下: [root@localhost ~]# docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{ ...
- 最速下降方法和Newton方法
目录 最速下降方法 Euclid范数和二次范数 采用\(\ell_1\)-范数的最速下降方向 Newton 方法 Newton 步径 二阶近似的最优解 线性化最优性条件的解 Newton 步径的仿射不 ...
- LODOP中ADD_PRINT_TABLE、HTM、HTML表格自动分页测试
LODOP中超文本超过打印项高度会自动分页,那么对于超大行,该行处在分页高度位置会怎样呢?本文用来测试一下三个语句对html中table中超大行在分页高度位置的处理. 测试结果:ADD_PRINT_T ...