将图片等信息提交到数据库当中
1:在数据库文件夹server下的tools下新建一个数据库文件other.sql,在里面创建表单opinions,表单信息有
1)id(必填项,主键)
2)openid(必填项,用来关联用户信息,是用户的唯一标识符)
3)src(选填项,用户上传的图片信息)
4)wechat(选填项,用户反馈的微信号)
5)opinion(必填项,用户反馈的建议)
6)create_time(必填项,数据的创建时间)
2:用户提交信息,后端需要在数据库中找到相应的文件并作出修改或者查找,然后返回信息,这里使用Koa路由
1)koa是一个后端框架,
2)路由管理就是接收到不同的api请求,找到相应处理的文件,查到或者修改数据,返回处理的信息
3)koa路由,统一在server/routes/index.js文件中管理
3:这里需要提交信息的按钮在opinion.wxml里(@click=“submmit”)
1)在这个文件内发起前端请求的信息,所以在相应的opinion.js文件内的methods中创建一个请求的方法submmit()
,用来请求后端的方法是异步方法,这样不会影响页面的加载所以在前面加一个async
用来辨明这是一个异步方法
2)在submmit方法中添加请求方法,使用微信小程序自带的请求接口wx.request({......})
3)在这里面将里面的参数改成自己的参数
(1)在server/routes/index.js路由管理文件里,新添加一条路由,在里面添加我们自定义的路由链接`createopinion`,这个链接主要是向数据库插入我们所需要提交的信息的,后面的`controllers.createopinion`这个路由指向了后端的处理文件
(2)在文件夹server/controllers下创建一个文件createopinion.js文件
(3)在前端文件opinion.js中刚刚创建的方法submmit下的wx.request
方法下添加元素
(3.1) url
元素里的http://localhost:5757是指我们服务器的信息,weapp
是所有路由信息的前缀,createopinion
是我们刚刚在数据库文件下添加的路由;
(3.2)method元素里指的是请求方法POST
和GET
(插入数据,删除数据,修改数据,请求方法都是POST
,查询数据请求方法就是GET
);
(3.3)data是我们要向后端传递的数据,这个数据我们可以先在wx.request
方法外定义
(3.4)openid是用户的唯一标识,这样我们才能知道是哪个用户提交的(使用微信自带的获取方法wx.getStorageSync()获取得到的用户信息userinfo里的openId)
success:function(res){}
是前端请求成功后可以执行的,在这里我们在里面添加一个打印信息,如果前端请求成功就会打印信息
wx.request方法内的全部代码:
4:在需要调用submmit方法的地方添加点击事件调用
5:在后端server/controllers/createopin![image-20201001111607680](D:\text\images\image-20201001111607680.png)ion.js
这个后端操作文件里处理刚刚在前端的请求信息
1)引入数据库,引入的是数据库文件夹server/qucloud.js文件,qucloud.js是mysql的软件工具包
2)接收请求信息(module.exports是nodejs的一个模板语法用来向前端暴露后面跟着的代码返回的信息,ctx这个参数里包含的是前端opinion.js发送过来的请求的信息)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETP8HGWr-1605459288257)(D:\text\images\image-20201001122325245.png)]
3)`ctx.reque.body`获取前端传递过来的data元素,将获取到的元素保存到数据库中刚刚创建的表opinions当中
4)调试小程序并输入相应的信息,可以在后端控制台当中看到已经获取到的请求信息
6:后端成功获取到消息后,需要向前端传递
1)ctx.state.data
这个语句向前端传递我们获取到的信息(code:0,说明我们传递成功)
7**:因为在前端与后端的联系都需要用到上面在opinion.js文件下wx.request()
这个方法,像这样都需要用到的方法,我们就可以封装到工具函数(src/utils/util.js)中。**
1)在util.js里在创建一个request()方法,并给这个方法传递三个参数(url这个路由信息,method请求方法,data请求数据)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBuVHtwF-1605459288260)(D:\text\images\image-20201001125329603.png)]
2)在需要调用这个方法的js文件内通过 import {post} from '@/util'
引用
3)在这个方法里return一个Promise对象(Promise容器相当于一个承诺,可以理解为一个容器,里面保存着某个未来才会结束的事件,这个事件通常是一个异步操作),在Promise中包含着一个箭头函数,这个箭头函数包含着两个参数(resolve,reject)
。
3)将opinion.js文件内的wx.request()这个方法剪切到Promise对象里的箭头函数里
4)在success中处理后端传递过来的数据,如果异步调用成功(也就是获取到code==0时),调用resolve函数在里面传入返回的信息。如果异步调用失败(也就是code!=0),调用reject函数,向里面传入失败的结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7TF3c4wG-1605459288262)(D:\text\images\image-20201001131203839.png)]
5)添加get和post请求方法,并将这两个方法暴露出去,给他们传两个参数(url,data),在get和post方法里返回上面的request方法,在request方法里需要传递三个参数(url,method参数,data)
6)在opinion.js文件中引用这post方法和showModel方法
8:在opini.js的submmit()方法下请求后端
1)post方法里的两个参数(路由,data)
2)在请求方法的前面加上await的意思是等到后端执行完成,并获取到返回数据后再往下执行
3)在下面打印出返回来的方法,这两条语句是执行正确,也就是util.js文件里res.data.code==0
时resolve方法返回的那条语句,
4)如果执行错误了,需要用reject方法返回的语句,就需要try{}catch(e){}
这个捕捉错误的方法来获取,将上面的两条语句粘贴到try{}里,当它执行成功是调用showModel()
方法,提示已经提交成功;如果执行失败,也就是util.js文件里通过reject()
方法返回的信息会被catch捕捉到,在里面打印出返回错误的信息,并调用showModel()
方法在页面显示是失败提示
9:(完善前端文件)加一个限制,用户的反馈信息不能为空,如果为空,就显示不能提交信息,在submmit方法下加一个if语句,如果用户输入的信息,也就是data里的参数(word_count)>0,才往后端发送请求
10:(完善后端文件也就是server/controllers/createopinion.js文件)需要将后端获取到的元素插入到数据库当中,然后用try{}catch(e){}语句将其包裹起来,如果操作数据成功,就会到执行try{}里面的语句,并打印出执行成功的语句;
1)await(必须等数据库操作完成后才能继续往下执行)
2)mysql(调用上面const {mysql}里的mysql)
3)opinions(是需要操作的表格)
4)insert(插入语句)
如果操作数据库失败,就会到catch里面,执行失败的语句
1)ctx.state={}(往前端传递错误)
2)code==-1(说明执行出现错误)
3)data:{}(将具体的错误传递到前端)
4)e.sqlMessage(一般都是数据库的错误,所以在这里指定)
在控制台打印出执行错误
作数据库失败,就会到catch里面,执行失败的语句
1)ctx.state={}(往前端传递错误)
2)code==-1(说明执行出现错误)
3)data:{}(将具体的错误传递到前端)
4)e.sqlMessage(一般都是数据库的错误,所以在这里指定)
在控制台打印出执行错误