微信小程序注意|常见开发示例(五)基于云平台

2020-12-09
来源:

小程序商城开发

回顾历史文章:

一、前言

我最近一直在开发微信小程序。我从未想到良好的Android开发已成为“ Northeast Chaos”。这种刺激,酸味和无与伦比!

但是好处是,可以有更多的联系方式,更分歧的思维方式,而且似乎还有其他思考问题的方法。

一方面,个人习惯的发展通常会整理笔记并总结记录,另一方面,也或多或少地证明了我在这个行业中为此而奋斗。

感谢您这个时代,也感谢您的前辈,站在巨人的肩膀上,继续努力,分享自己的一点点,并帮助那些来帮忙的朋友,一起加油〜

简单讨论一下要求:

本文不会过多解释基本环境配置,默认的云开发环境已经可用〜

让我们开始分析和编码实施,欢迎交流〜

参考链接附在文章的末尾。

二、需求分析

在对多方(zi)进行早期探索之后,明确了以下要点:

基于以上两点,阐明以下开发过程:

整理出要求后,一眼就能感觉清楚吗?

从下面开始实际的开发。当然,您会在此过程中遇到意外的惊喜。别担心,不要惊慌,只需一个一个地修复〜

三、实际发展

个人推荐,在编写每个云功能之后,请在本地对其进行测试并进行更多记录。如果您在早期遇到问题,则可以在后期节省麻烦。

在测试没问题之后,请记住选择“上传和部署:云安装依赖项,不要上传node_modules”。

每个云功能都需要上传〜

3.1添加用于获取和报告信息的云功能/界面

根据以上分析,第一步我们需要去云平台提取用户先前报告的数据,也就是说我们需要创建一个云功能来获取用户数据,步骤如下:如下:

在cloudfunctions目录下选择“ New Node.js Cloud Function”,然后填写要获取的数据的名称,即云功能/接口的名称。例如,在这里我叫getReportData,创建后它将如下所示:

接下来,添加以获取index.js中数据库表中的数据。关键内容:

代码如下:

// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { return await cloud.database().collection('DataReport').get(); }

然后打开云功能的本地调试,对其进行测试,然后查看输出结果:

3.2在node-xlsx的帮助下生成Excel并将其上传到云平台

还必须创建一个函数,以将获取的报告数据组合到Excel中。该功能的主要功能是:

fileID稍后将交换下载链接。因为我们的业务需要使用导出时间设置导出Excel名称,所以您需要注意小程序采集时间异常(实际上,时区导致采集时间比实际时间少8小时)。

部分代码如下,部分业务代码已隐藏:

// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 操作 Excel 类库 const xlsx = require('node-xlsx'); // 云函数入口函数 exports.main = async (event, context) => { try { let { reportList } = event; // 定义 Excel 表名 let dataCVS = 'online-excel/资料表-' + processDate() + '.xlsx'; // 定义存储数据 let allData = []; // 定义表属性 let row = ['序号', '地区']; allData.push(row); // 组装数据 let tempKey = 1; for (let key in reportList) { let arr = []; let reportBean = reportList[key]; arr.push(tempKey++); // 序号 arr.push(reportBean.report_yacht_address); // 地区 // ... allData.push(arr); } // 将数据保存到 Excel 中 var buffer = await xlsx.build([{ name: "总数据", data: allData }]); // 把 Excel 文件保存到云存储中 return await cloud.uploadFile({ cloudPath: dataCVS, fileContent: buffer }); } catch (e) { console.error(e); return e; } } /** * 获取东 8 区时间 */ function getEast9Time() { // 目标时区,东8区 const targetTimezone = -8; // 当前时区与中时区时差,以min为维度 const dif = new Date().getTimezoneOffset(); // 本地时区时间 + 本地时区时差 = 中时区时间 // 目标时区时间 + 目标时区时差 = 中时区时间 // 目标时区时间 = 本地时区时间 + 本地时区时差 - 目标时区时差 // 东8区时间 return new Date().getTime() + dif * 60 * 1000 - (targetTimezone * 60 * 60 * 1000); } /** * 获取格式化后时间格式 */ function processDate() { // 时间格式化 由于最终生成在线地址,: 是特殊字符,因此时间时分秒间不添加任何字符 date = new Date(getEast9Time()); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h = date.getHours(); h = h < 10 ? ('0' + h) : h; var minute = date.getMinutes(); minute = minute < 10 ? ('0' + minute) : minute; var second = date.getSeconds(); second = second < 10 ? ('0' + second) : second; return y + '-' + m + '-' + d + ' ' + h + '' + minute + '' + second; };

然后右键单击此功能目录,然后选择“在外部终端窗口中打开”以准备安装node-xlsx。

3.3获取下载URL

通过getTempFileURL方法获取下载地址并设置有效期。请记住对地址进行编码以防止中文〜

3.4将下载地址复制到用户粘贴板

只需使用setClipboardData / getClipboardData。

四、完整的js代码

/** * 一键导出 Excel */ onExportExcelClick() { let that = this; // 必须登录 if (app.globalData.userInfo == null) { msg.showToast('请登录后再进行数据导出!'); return; } wx.showLoading({ title: '数据拉取中...', }); // 读取数据填报数据 wx.cloud.callFunction({ name: 'getReportData', success: res => { console.log("---> 读取成功", res.result.data); that.saveExcel(res.result.data); }, fail: err => { wx.hideLoading(); console.log('---> 读取失败', err); } }); }, /** * 将数据保存到 Excel 中并存储到云存储中 * @param {读取到的数据填报信息} reportList */ saveExcel(reportList) { let that = this; wx.showLoading({ title: '数据合成中...', }); wx.cloud.callFunction({ name: "getExportExcel", data: { reportList: reportList }, success: res => { console.log("---> 保存成功", res); that.getExcelDownLoadUrl(res.result.fileID); }, fail: err => { wx.hideLoading(); console.log("---> 保存失败", err); }, }); }, /** * 获取 Excel 下载地址 * @param {*} fileID */ getExcelDownLoadUrl(fileID) { let that = this; wx.showLoading({ title: '数据解码中...', }); wx.cloud.getTempFileURL({ fileList: [{ fileID: fileID, maxAge: 60 * 60 * 24, // 有效期 24 小时 }], success: res => { console.log("---> 获取 Excel 下载地址:", res); that.copyExcelDownloadUrl(encodeURI(res.fileList[0].tempFileURL)); }, fail: err => { wx.hideLoading(); console.log("---> 获取 Excel 下载地址失败", err); } }); }, /** * 复制 Excel 下载地址 * @param {*} excelDownloadUrl */ copyExcelDownloadUrl(excelDownloadUrl) { console.log("---> 获取 Excel 解码地址 :", excelDownloadUrl); wx.setClipboardData({ data: excelDownloadUrl, success: res => { wx.getClipboardData({ success: (option) => { wx.hideLoading(); msg.showToast('文件下载地址复制剪贴板~'); }, fail: (err) => { wx.hideLoading(); } }) } }); },

五、问题摘要六、参考资料

分享