codecamp

云开发 三个小案例

案例 1:文章阅读数服务

我们搭建自己的博客、或者个人网站,往往需要统计服务。统计服务分为两种,一种是类似百度、友盟的统计,可以根据数据来看 PV/UV 或者人群画像。但是有时候也需要展示每一篇文章的阅读数给“读者”看。阅读统计服务既可以服务后者的,也可以服务自己。
可以参考 serverless实践:打造自己的阅读计数组件 这篇文章。

统计单篇文章/单个页面的阅读计数

核心代码如下:

'use strict';
const tcb = require('tcb-admin-node')
const app = tcb.init({
  env: "你的环境 ID"
})
const db = app.database()
const _ = db.command


exports.main = async (event, context) => {
  let coll = "read_count"
  let path = decodeURIComponent(event.queryStringParameters.path || '')
  let host = decodeURIComponent(event.queryStringParameters.host || '')

  
  if(!path && !host){
    return {
        status: 0,
        info: '必须传入 host 和 path 参数'
    }
  }
  let data = await db.collection(coll).where({
    host: host,
    path: path
  }).limit(1).get()


  //更新
  if(data.data.length){
    let doc_id = data.data[0]._id
    await db.collection(coll).doc(doc_id).update({
        count: _.inc(1)
    })
    let obj = await db.collection(coll).doc(doc_id).get()
    return {
        status: 1,
        count: obj.data[0].count
    }
  }
  //增加
  else{  
    let o =  await db.collection(coll).add({
      host: host,
      path: path,
      count: 1
    })
    return {
      status: 1,
      count: 1
    }
  } 


};

如果自己不想开发和搭建,但是想使用现成的服务,可以参考阅读 https://github.com/serverless80/tongji,已经部署为独立服务了。

案例 2:大学之巅小程序

2018 年,开发了一款小程序名叫「大学之巅」,里面包含2600 + 所高校数据;2019 年将小程序数据库改造成了「小程序云开发」,当然目前还有些图片是存在 OSS 上,没有搬迁。可以扫码体验 。

小程序效果如下:

当然,这个小程序的数据开源了,在 https://github.com/vczero/serverless-colleage。有了数据,再使用云开发造一个小程序见识很 easy 的事了。

案例 3: 个人相册小程序

有很多美好的回忆,有很多重要的图片,图片管理难很棘手。手机一年换一部,图片传输费劲还经常丢失。经常提示空间不足,删了一遍又一遍。于是开发了一款小程序:小小收藏夹,用来管理自己需要收藏的私人图片。可以扫描体验:

小程序效果如下:

代码已经开源,请参考:https://github.com/vczero/CloudPhoto

结语

拥抱 Serverless,拥抱云开发吧,用时代的生产力,去做一些有趣的事情......

云开发 再谈 云 + 端 开发模式
云开发 附录
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }