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组件库的诞生使我们的开发速度大大的加快,丰富的 ...
随机推荐
- Windows系统下搭建Git本地代码库
近由于工作需要,要把工作代码做一下版本管理.工作代码也不方便放到github上,也不想付费建私密库,公司也没几个人,所以就想着搭建一个本地Git版本库,来做版本管理.搭建过程如下. 系统环境:Dell ...
- [20190401]隐含参数_mutex_spin_count.txt
[20190401]隐含参数_mutex_spin_count.txt --//上午做了一些测试关于semtimedop函数调用,发现自己上个星期在一些问题上理解错误.--//相关链接:--//htt ...
- Oracle的ORA-02292报错:违反完整性约束,已找到子记录
第一种方法: 第一步就是找到子表的记录: select a.constraint_name, a.table_name, b.constraint_name from user_constraints ...
- Delphi Record To Stream
type TUserInfo = record sUserId,sUserName:String; iUserCount:integer; end; procedure TForm1.Button1C ...
- c/c++ 继承与多态 友元与继承
问题1:类B是类A的友元类,类C是类B的友元类,那么类C是类A的友元类吗?函数fun是类B的友元函数,那么fun是类A的友元函数吗? 都不是,友元关系不能传递. 问题2:类B是类A的友元类,类C是类B ...
- [原创]GDB调试指南-断点设置
前言 上篇<GDB调试指南-启动调试>我们讲到了GDB启动调试的多种方式,分别应用于多种场景.今天我们来介绍一下断点设置的多种方式. 为何要设置断点 在介绍之前,我们首先需要了解,为什么需 ...
- 黏包现象之TCP
老师的博客:http://www.cnblogs.com/Eva-J/articles/8244551.html#_label5 server #_*_coding:gbk*_ from socket ...
- vue-router(hash模式)常见问题以及解决方法
问题一:// 动态路由/detail/:id 问题:动态路由跳转的时候,页面是不刷新的,相信很多人都遇到了相同的问题解决方法:在全局的router-view组件上设置一个key值,此key值为一个时间 ...
- 文本分类实战(八)—— Transformer模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- root用户无法访问Mysql数据库问题的解决
在使用Centos系统远程访问Mysql数据库的时候,系统提示报如下错误: Access Denied for User 'root'@'localhost' (using password: YES ...