上篇文章讲述了天气预报小程序的开发第一步:准备天气预报数据,现在进入到第二步。
二、城市列表数据
国内的城市数量和名称基本上是固定的,可以通过一个JSON文件来存储国内省市信息,之后将其上传到云存储中,在云函数中读取并解析,最终返回结构化的数据到客户端。此整理好的JSON文件在本书的配套资料中有提供——名为cities.json,读者可以直接拿来使用。

打开云开发控制台,在存储管理模块中直接将cities.json文件上传到云存储中。在工程的cloudfunctions文件夹下新建两个云函数getProvince和getCities,分别用来获取所有一级地区的数据与获取二级地区的数据。getProvince云函数的index.js文件代码如下:
// 云函数入口文件const cloud = require('wx-server-sdk')cloud.init()// 云函数入口函数exports.main = async (event, context) => { // 从云文件读取城市数据 const fileID = 'cloud://cloud1-4ghg65i9b5531b77.636c-cloud1-4ghg65i9b5531b77-1308596385/cities.json' const res = await cloud.downloadFile({ fileID: fileID, }) const buffer = res.fileContent; const jsonString = buffer.toString('utf8'); // 读取所有一级地区 const json = JSON.parse(jsonString); let result = []; json.forEach(item=>{ result.push(item.provinceName); }); return { result:result }}
导读:
这段代码实现了一个云函数,用于读取云存储文件并处理数据:
1. 从环境变量获取预先上传的城市数据文件fileID
2. 使用云函数sdk的downloadFile方法下载该文件
3. 将下载后的文件内容buffer解析为字符串
4. 使用JSON.parse解析json字符串,得到所有的城市数据
5. 遍历数据,仅保留省份名称
6. 将省份名称数组返回给调用方
这样通过云函数下载云存储文件,可以避免小程序需要下载大文件。
优点:
1. 小程序只需要处理关键业务,不用管理文件下载等额外工作
2. 云函数内可方便访问云服务,如云存储、数据库等
3. 云函数具备足够的运行时长和内存空间处理任务
4. 实现业务逻辑与数据隔离,利于维护
5. 云函数自动扩展计算能力,无需考虑容量问题
综上,使用云函数处理云存储文件,可实现小程序和云端的合理分工,是云开发的典型应用场景。
getCities云函数的index.js文件代码如下:
// 云函数入口文件const cloud = require('wx-server-sdk')cloud.init()// 云函数入口函数exports.main = async (event, context) => { const province = event.province; console.log(event); const fileID = 'cloud://cloud1-4ghg65i9b5531b77.636c-cloud1-4ghg65i9b5531b77-1308596385/cities.json' const res = await cloud.downloadFile({ fileID: fileID, }) const buffer = res.fileContent; const jsonString = buffer.toString('utf8'); // 读取所有一级地区 const json = JSON.parse(jsonString); let result = []; json.forEach(item=>{ if (item.provinceName == province) { result.push(...item.city); } console.log(result); }); return { result:result }}
导读:
这段代码实现了一个云函数,用于根据省份名称查询该省份下的所有城市:
1. 从传入的event参数中获取省份名称province
2. 和上一个例子一样,先下载存储在云文件的城市数据
3. 解析json,得到所有的城市数据
4. 遍历数据,判断省份名称是否匹配
5. 如果匹配,将该省份的所有城市添加到结果数组result
6. 将结果数组返回给调用方
这样通过把业务逻辑放在云函数,可以实现按省份查询城市的能力,不需要小程序处理大量数据。
优点:
1. 小程序只需要传入关键参数,简化业务逻辑
2. 云函数可以复用下载文件,处理文件等公共逻辑
3. 查询结果可配置缓存,优化速度
4. 可在云函数中连接其他云服务,拓展功能
5. 灵活的触发方式,可供多个端调用
天气预报小程序的开发,第一小部分就正式结束了,如果大家感兴趣,还会继续更形,敬请期待。
本文节选自《微信小程序与云开发:从入门到实践》,内容发布获得作者和出版社授权。