小程序云开发初体验

2020-05-19 17:47:25 浏览数 (1)

微信小程序有提供云开发的支持,这次尝试使用这种方式开发一个类似pasterbin的微信小程序。

支持粘贴代码在微信中分享,可以避免直接通过聊天框发送代码时被截断,且显示效果不佳的问题。

小程序最终大概是长这样的:

功能分析

核心功能就两点:

  1. 有一个输入框可以粘贴代码文本,然后调用云函数将内容保存到云数据库中
  2. 根据id查询到数据库中的代码片段,然后用markdown渲染语法高亮显示出来

小程序端的UI交互逻辑不提,在云端执行的就是两个云函数:

  1. createSnippet:代码片段入库
  2. getSnippet:读取代码片段

创建项目

在微信开发者工具创建项目时,需要选择上小程序-云开发这一项,然后按照后续的步骤完成项目的创建,中间的过程会有点长,需要在微信开发者平台上完成个人的身份认证等等,在创建完成之后点击开发者工具中的云开发按钮,可以看到相关的信息:

这里我们主要就使用数据库和云函数两个功能。

使用小程序账号登录腾讯云的web控制台也可以看到并操作相关的资源,https://console.cloud.tencent.com/ :

创建数据库集合

在开发者工具的云开发控制台中先创建数据库集合,这里的数据库和集合的概念和monogdb基本一致,了解过mongodb的同学马上就能理解:

创建云函数

在开发者工具中新建新云函数

我们需要以下两个云函数,代码都非常简单

  1. createSnippet,保存代码片段
代码语言:txt复制
'use strict';
const cloud = require('wx-server-sdk')
cloud.init({})
exports.main = async(event, context) => {
    console.log("create a new snippet")
    let codeText = event["code"]
    console.log(`code: ${codeText}` )
    const db = cloud.database()
    //保存代码到数据库中
    let res = await db.collection("snippet").add({
       data: {
           code: codeText
       }
    })
    console.log(res)
    return res
};
  1. getSnippet,读取代码片段
代码语言:txt复制
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  console.log('get snippet:', event['id'])
  const db = cloud.database()
  let res = await db.collection("snippet").doc(event['id']).get()
  console.log('get snippet:', res)
  return res
}

这里需要注意的时,由于我们使用到了云环境的资源,在代码中必须先调用 cloud.init()方法来做初始化。

小程序调用云函数

提交代码片段:

代码语言:txt复制
wx.cloud.callFunction({
      //云函数名称
      name: 'createSnippet',
      //云函数的参数
      data: {
        code: this.data.codeText,
      },
      success: res => {
        console.log('[云函数] [createSnippet] 调用成功:', res)
        let snippetId = res.result._id
        console.log('snippetId:', snippetId)
        //调用成功之后跳转到显示页面
        wx.hideLoading({
          complete: (res) => {
            wx.navigateTo({
              url: `/pages/view/view?_id=${snippetId}`,
            })
          }
        })

      },
      fail: err => {
        wx.hideLoading({
          complete: (res) => {
            wx.showToast({
              icon: 'none',
              title: '调用失败',
            })
          },
        })
        console.error('[云函数] [createSnippet] 调用失败:', err)
      }
    })

读取代码片段:

代码语言:txt复制
wx.cloud.callFunction({
      name: 'getSnippet',
      data: {
        id: _id,
      },
      success: res => {
        console.log('[云函数] [getSnippet]  调用成功:', res)
        //显示逻辑
        wx.hideLoading()
      },
      fail: err => {
        console.error('[云函数] [getSnippet]  调用失败:', err)
      }
    })

云函数本地调试

可以在开发者工具中开启云函数的本地调试功能:

简单总结

是不是非常的简单?微信提供的这套开发环境已经非常完善,目前提供的数据库云存储和云函数的能力,已经可以满足很多场景下的需求。另外如果不是小程序应用,也可以使用腾讯云单独提供的CloudBase云开发环境,具备和小程序云开发同样的能力。最后,可以体验一下我的这个小程序,在微信中愉快的发送代码吧:

0 人点赞