微信小程序云开发数据库 网页管理后台「终于解决」

小程序 (79) 2023-05-26 09:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说微信小程序云开发数据库 网页管理后台「终于解决」,希望能够帮助你!!!。

目录

一、前言

  • 使用云开发来开发微信小程序提供云数据库、云存储、云函数、云调用等支持,可以快速配置云端环境进行开发,但暂时并没有提供好的运维解决方案。了解到微信小程序官方文档中提供了云开发HTTP API文档
  • 所以我尝试基于此API操作云开发的数据库,搭建小程序的网页管理后台。

二、实战

1、获取access_token

  • access_token是小程序的全局唯一后台接口调用凭据,也就是调用大部分的http接口都需要同时传入参数access_token。access_token
    的有效期为 2 个小时,期间可以重复使用,因此access_token需要首先获取,获取一次后缓存起来,失效后再次获取。 API
    auth.getAccessToken
    获取access_token需要三个参数:grant_type 、appid、secret(grant_type值为credential,appid和secret在「微信公众平台
    • 设置 - 开发设置」页中获得)
function getAccessToken(){ 
   
    $.ajax({ 
   
        url:'https://api.weixin.qq.com/cgi-bin/token?appid='+data.appid+'&secret='+data.secret+'&grant_type='+data.grant_type,
        method:"GET",
        success: res=>{ 
      //获取access_token
            console.log(res)
            return res.access_token
        },
        error: err=>{ 
   
            console.log(err)
        }
    })
}

在调用接口时出现了跨域问题
微信小程序云开发数据库 网页管理后台「终于解决」_https://bianchenghao6.com/blog_小程序_第1张
解决方案: 使用node.js搭建本地代理服务器

// proxy.js
const http = require('http');
const request = require('request');
var urltool = require('url');  
var querystring = require('querystring');

const hostIp = '127.0.0.1';
const apiPort = 6060;
const data={ 
   
 appid:"xxx",
 secret:"xxx",
 grant_type:"client_credential",
 env:"xxxx"
};
//创建 API 代理服务
const apiServer = http.createServer((req, res) => { 
   
  console.log("***************************************")
  console.log('[请求]来自='+req.url);
  if(req.url=="/access_token"){ 
   
	getAccessToken(res)
  }
});
//监听 API 端口
apiServer.listen(apiPort, hostIp, () => { 
   
  console.log('代理接口,运行于 http://' + hostIp + ':' + apiPort + '/');
});
function getAccessToken(res){ 
   
  const url='https://api.weixin.qq.com/cgi-bin/token?appid='+data.appid+'&secret='+data.secret+'&grant_type='+data.grant_type;
  request({ 
   
    url: url,//请求路径
    method: "GET",//请求方式,默认为get
    headers: { 
   //设置请求头
        "content-type": "application/json",
    },
    body: JSON.stringify(data)//post参数字符串
}, function(error, response, body) { 
   
    if (!error && response.statusCode === 200) { 
   
      //编码类型
      res.setHeader('Content-Type', 'text/plain;charset=UTF-8');
      //允许跨域
      res.setHeader('Access-Control-Allow-Origin', '*');
      //返回代理内容
	  console.log("返回数据:"+body)
      res.end(body);
    }
 });
}

直接运行
微信小程序云开发数据库 网页管理后台「终于解决」_https://bianchenghao6.com/blog_小程序_第2张
再次通过ajax访问,调用接口,成功获取到access_token。
微信小程序云开发数据库 网页管理后台「终于解决」_https://bianchenghao6.com/blog_小程序_第3张微信小程序云开发数据库 网页管理后台「终于解决」_https://bianchenghao6.com/blog_小程序_第4张

2、数据库操作

  • 以数据库查询为例,API databaseQuery ,通过代理服务器转发请求调用接口,传入参数:
  •  接口调用凭证 access_token
    
  •  云环境ID env
    
  •  数据库操作语句 query
    
function getCollectionFeedback(res,req){ 
        //查询feedback
	var postData = '';
	var postObjc = ''; 
	// 给req对象注册一个接收数据的事件
	req.on('data',function (chuck) { 
     
		postData += chuck;
	})
	// 到post请求数据发完了之后会执行一个end事件,这个事件只执行一次
	req.on('end', function () { 
   
		postObjc = querystring.parse(postData);
		// 打印出post请求参数,
		  const query="db.collection(\"feedback\").where({}).get()";
		  const querydata={ 
   
			env:data.env,
			query:query
		  }
		  const url='https://api.weixin.qq.com/tcb/databasequery?access_token='+ postObjc.access_token;
		  request({ 
   
			url: url,//请求路径
			method: "POST",//请求方式,默认为get
			headers: { 
   //设置请求头
				"content-type": "application/json",
			},
			body: JSON.stringify(querydata)//post参数字符串
		}, function(error, response, body) { 
   
			if (!error && response.statusCode === 200) { 
   
			  //编码类型
			  res.setHeader('Content-Type', 'text/plain;charset=UTF-8');
			  //允许跨域
			  res.setHeader('Access-Control-Allow-Origin', '*');
			  //返回代理内容
			  console.log("返回数据:"+body)
			  res.end(body);
			}
		 });
	})
}

获取到数据库数据后,显示在前端网页上,效果如下:
微信小程序云开发数据库 网页管理后台「终于解决」_https://bianchenghao6.com/blog_小程序_第5张
插入、删除、更新数据库同理,传入需要的参数和数据库语句即可获取到相应的数据。

发表回复