5.1【微信小程序全栈开发课程】首页完善(一)--点击记录插入数据库

简介: 目前,我们在首页实现了点击+1、+5、-1、-5的按钮,总分会发生变化。但是重新打开小程序,总分又变成0了如果想要继续在之前总分的基础上加减分数,就需要数据库来辅助。这节我们实现点击加减分数按钮,同时产生对应记录插入到数据库中要开始操作首页了,我们在app.json中将首页放在pages的第一个

目前,我们在首页实现了点击+1、+5、-1、-5的按钮,总分会发生变化。但是重新打开小程序,总分又变成0了


如果想要继续在之前总分的基础上加减分数,就需要数据库来辅助。


这节我们实现点击加减分数按钮,同时产生对应记录插入到数据库中


要开始操作首页了,我们在app.json中将首页放在pages的第一个

"pages": [
    "pages/index/main",
    "pages/me/main",
    "pages/instruction/main",
    "pages/opinion/main"
],


1、创建records数据表


(1)records数据表的字段


image.png


(2)创建records数据表


//登录数据库
~/WeChatProjects/truth_hold$ mysql -uroot -p
//登录成功之后,选择cAuth表
mysql> use cAuth;
//在数据库中粘贴下面代码,直接回车,records表就创建好了
DROP TABLE IF EXISTS `records`;
CREATE TABLE `records` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `openid` varchar(100) NOT NULL,
  `add` int(11) NOT NULL,
  `mark` int(11) NOT NULL,
  `note` varchar(100) DEFAULT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


查看当前数据库中的表,已经有opinions数据表了


mysql> show tables;
+-----------------+
| Tables_in_cauth |
+-----------------+
| cSessionInfo    |
| opinions        |
| records        |
+-----------------+
3 rows in set (0.00 sec)


2、创建文件并添加路由


(1)创建操作文件createrecord.js


先在后端server/controllers文件夹中创建操作文件createrecord.js,用来将从前端页面提交的数据,插入到records表中


(2)添加路由


在路由管理文件server/routes/index.js文件中添加路由


//需要添加的代码
router.post('/createrecord', controllers.createrecord)
//参考代码,无需粘贴
//module.exports = router


3、在前端添加提交方法


1)编辑src/pages/index/index.vue文件,引入util.js文件中的post、get等工具函数


//参考代码,无需粘贴
//<script>
//需要添加的部分
import {showSuccess,showModal,post,get} from '@/util'

(2)打开src/pages/index/index.vue文件,编辑methods函数中的addMark方法


在方法前面添加async,涉及到后端数据库的操作,一般前面都要加上async异步方法


//原代码
//addMark (add) {
//this.mark = this.mark + add
//  console.log("mark为:",this.mark)  
//},
//编辑后
async addMark (add) {
  try{
    const data = {
      openid: this.userinfo.openId,
      add:add
    }
    //请求后端,找到server/controllers/createrecord.js文件
    const res = await post('/weapp/createrecord', data)
    console.log("从后端返回的执行正确的信息是:",res)
    this.mark = this.mark + add
  }catch(e){
    showModal('失败',"请重试哦~")
    console.log("从后端返回的执行错误的信息是:",e)
  }
},


4、编辑后端操作文件


这里的后端操作文件也就是server/controllers/createopinion.js文件,在这个文件中添加下面的代码:


const {mysql} = require('../qcloud')
module.exports = async (ctx) => {
  const {openid,add} = ctx.request.body
  try{
    //查找出最后一条记录
    const res = await mysql('records')
        .where("openid",openid)
        .select('mark')
        .orderBy('id','desc').first()
    //得到最后一条记录的分数
    if(res){
      var mark = res.mark
    }else{
      var mark = 0
    }
    //当前总分 = 最后一条记录的分数 + 本次操作的分数
    mark = mark + add
    console.log("当前分数为:",mark)
    //将openid、本次操作的分数、当前总分
    await mysql('records').insert({
      openid, add, mark
    })
    //执行成功返回到前端的数据
    ctx.state.data = {
      code: 0,
      msg: 'success'
    }
    console.log("执行成功")
  }catch(e){
    console.log("执行错误:",e)
    //执行失败返回到前端的数据
    ctx.state = {
      code: -1,
      data: {
        msg: '添加失败' + e.sqlMessage
      }
    }
  }
}


5、点击按钮测试


(1)点击按钮,控制台会出现反馈信息。


如果控制台没有反应,就看一下是否正确import了util.js文件


image.png


(2)查看数据库中添加的数据,可以看到刚刚添加的数据


//登录到数据库
~/WeChatProjects/truth_hold $ mysql -uroot -p
Enter password:
//选择cAuth数据库
mysql> use cAuth;
Database changed
//输入select * from records;语句,能查出刚刚插入的数据
mysql> select * from records;
+----+------------------------------+-----+------+----------------+---------------------+
| id | openid                       | add | mark | note           | create_time         |
+----+------------------------------+-----+------+----------------+———------------------+
| 1  | oQPCO4ol5Y_-yL0MnCGxwbiHbSek |   1 |    1 | NULL           | 2019-09-30 22:42:23 |
+----+------------------------------+-----+------+----------------+---------------------+
1 rows in set (0.00 sec)
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
存储 前端开发 小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
|
小程序 数据库
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
1277 0
|
小程序 开发者
【微信小程序-原生开发】实用教程05-首页(含自定义调试模式、插入图片、图文排版、底部留白、添加本地图片)
【微信小程序-原生开发】实用教程05-首页(含自定义调试模式、插入图片、图文排版、底部留白、添加本地图片)
676 0
|
小程序 Linux Python
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
312 2
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
671 0
|
SQL 关系型数据库 MySQL
支付系统----微信支付18-----创建并连接数据库
支付系统----微信支付18-----创建并连接数据库
|
XML 关系型数据库 MySQL
支付系统----微信支付19---集成MyBatis-plus,数据库驱动对应的依赖版本设置问题,5没版本没有cj这个依赖,mysql驱动默认的是版本8,这里是一个父类,数据库都有,写个父类,继承就行
支付系统----微信支付19---集成MyBatis-plus,数据库驱动对应的依赖版本设置问题,5没版本没有cj这个依赖,mysql驱动默认的是版本8,这里是一个父类,数据库都有,写个父类,继承就行
|
JavaScript 小程序 应用服务中间件
vue 本地/PC端访问微信云数据库
vue 本地/PC端访问微信云数据库
467 0
|
小程序 JavaScript 安全
【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
983 0
|
小程序 数据库 C++
【微信小程序-原生开发】实用教程17 - 详情页触发列表页刷新,点击图片放大预览,转发给好友/群,分享到朋友圈
【微信小程序-原生开发】实用教程17 - 详情页触发列表页刷新,点击图片放大预览,转发给好友/群,分享到朋友圈
357 0