精华内容
下载资源
问答
  • 云端开发是什么
    千次阅读
    2021-06-30 18:01:19

    云开发简介

    前言

    在了解云开发之前,我们首先要了解什么是服务器 ,它能做什么?
      服务器,也称伺服器,是提供计算服务的设备。服务器需要响应服务请求,并进行处理,具备承担服务并且保障服务的能力。相对于普通PC来说,服务器在稳定性、安全性、性能等方面都要求更高,因此它比普通计算机运行更快、负载更高、价格更贵。
      
      简单来说服务器就是更高级的电脑,只不过我们一般用的电脑是发送请求的客户端,服务器是接受服务请求,并及时给与反馈的服务端。举个例子,如果你想要在网上浏览商品,那么在搜索的过程,实际上就是一次服务器请求,服务器根据你的搜索内容将结果进行处理然后返回到页面进行展示;购物下单也是一次服务器请求,客户端将商品、收货地址等信息发送到服务器,服务器处理后将订单信息返回。

    什么是云?

    概念:云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种分布式托管技术。

    理解:它是指通过网络将大量电脑巧妙连接起来的一个大型虚拟电脑系统,或者说云技术就是利用互联网的高速传输能力,将所需要的数据和服务都放在“网络云”(大型数据处理中心)上,只需要一个终端就可以使用各种服务。
      举个例子,工人将工具放在工具房内,而不是随身带着,需要的时候去工具房拿,工人只需要知道工具如何使用,而不需要知道工具具体放在哪里、工具又如何存放。

    云开发是什么?

    官方解释:
      云开发可以为Web、⼩程序、移动应⽤等提供可靠、丰富的⼀站式后端能⼒,并提供多语⾔ SDK,轻松开发多端应⽤。
      开发者可以使用云开发开发微信小程序、小游戏、Web等,无需搭建服务器,即可使用云端能力。云开发为开发者提供完整的云端支持,弱化了后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代。

    理解:
      简单的说,就是云开发是⼀套综合类服务的技术产品,通常开发⼀个完整的应⽤(⼩程序、Web、App)都需要数据库、存储、CDN、后端函数、静态托管、⽤户登录等等,但是云开发将这些服务都集成到了⼀起,⽽且以⼀种全新的开发⽅式,让开发⼀个应⽤更加方便快捷且强大。
      从开发流程来看,过去开发一个微信小程序需要经过产品分析、模块划分、原型设计、UI 设计、前端开发、后端开发、接口联调、测试上线等开发阶段。有了云开发后,前端工程师将可以独立实现前端开发、后端开发、接口联调等工作,且无需太多后端知识。

    云开发

    云服务

    能力说明
    云数据库   它是⼀个性能强⼤的⽂档型数据库(⾮关系型数据库),⽀持基础读写、聚合搜索、数据库事务、实时推送等功能;既支持小程序前端操作,也支持云函数操作。
    云函数云函数可以以函数的形式在云上运⾏后端代码,⽀持SDK的调⽤或HTTP请求,微信私有协议天然鉴权。云函数存储在云端,可以根据函数的使⽤情况,⾃动扩缩容。
    云存储云存储提供稳定、安全、低成本、简单易⽤的云端存储服务,⽀持任意数量和形式的⾮结 构化数据存储,如图⽚、⽂档、⾳频、视频、⽂件等;支持云开发控制台可视化管理。
    云调用云调⽤是云开发提供的基于云函数使⽤⼩程序开放接⼝以及腾讯云的能⼒,⽀持在云函数调⽤服务 端开放接⼝,如发送模板消息、获取⼩程序码等操作都可以在云函数中完成。
    云托管云托管是云开发提供的新一代云原生应用引擎(App Engine 2.0),支持托管用任意语言和框架编写的容器化应用,和云开发其他产品一起为用户提供云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务。

    云开发的优势

    特点说明
    无服务器 借助 CloudBase 云数据库、云存储、云函数等强大的后端能力,无需自行搭建或维护服务器即可开发、上线应用。
    跨平台支持小程序、Web、Flutter、Unity 等多个平台,帮助各平台开发者高效开发应用。
    轻松托管使用 CloudBase 静态文件、云函数、前端 SSR 应用、容器等托管能力,和简单快捷的部署工具,一键发布应用。
    节约成本CloudBase 天然支持弹性扩缩容,按量计费,灵活管理,极大节约成本。

    云开发与传统开发

    云开发传统开发
    难易程度简单容易复杂困难
    域名不需要需要
    部署自动部署部署复杂,升级困难
    运维云平台提供保障OS 入侵、登录风险、文件系统安全、网络安全、端口监听 等
    开发专注业务逻辑、核心逻辑代码开发需要关心后端配置部署
    资源底层资源由腾讯云提供支持,具备快速拓展能力资源可拓展性差
    鉴权原生集成SDK,云相关API开箱即用,小程序云调用可免鉴权直接调用微信开放接口需要鉴权,访问限制等
    响应云函数并发次数有限;云函数请求数据库速度较慢、返回数据量有限响应速度较快,并发量大
    成本资源按量付费,且具有一定量的免费额度,费用更低;开发成本低服务器费用高,运维成本高,开发成本高
    适用中小型公司、个人大型公司

    云开发家族

    微信小程序·云开发

    介绍
      微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。开发者无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。小程序·云开发目前具备云开发概念中的所有能力,相比于云开发来讲,还有微信提供的云调用、微信支付等特别能力。但使用小程序·云开发时,必须依赖一个小程序才可以进行。
    能力

    基础能力:云数据库云函数云存储云托管
    扩展能力:内容管理(CMS)环境共享静态网站

    优势
    在这里插入图片描述

    腾讯云·云开发

      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等 serverless 化能力,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用、Flutter 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。

    qq小程序·云开发

      QQ小程序从2019年6月正式发布之后,依赖于QQ这个国民级应用和独特的设计,迎来了百倍增长。为了更好的方便开发者在QQ生态获得更多的发展和成长,QQ小程序团队与腾讯云云开发团队一起将云开发这款产品带给了QQ小程序开发者,以求帮助开发者快速构建自己的应用,降低开发者的研发成本,为开发者提供一云多端的立体化支持。

    参考资料

    ①文档
    微信小程序云开发
    腾讯云开发
    ②教程
    云开发学习指南
    ③官网
    云开发CloudBase

    更多相关内容
  • 简介:云端开发在阿里的典型应用场景,云端开发指开发者可基于云平台完成编码、测试、发布等研发流程。一个完整的云端开发平台不仅是提供了一个云端的编码环境,还提供了一整套研发工具和配套设施,让开发者做到...

    简介:云端开发在阿里的典型应用场景,云端开发指开发者可基于云平台完成编码、测试、发布等研发流程。一个完整的云端开发平台不仅是提供了一个云端的编码环境,还提供了一整套研发工具和配套设施,让开发者做到在云端即可完成应用程序的需求、编码、测试和运维的全生命周期管理。

    本文作者:弗止,阿里云云效技术专家;辰颜,阿里云云效高级开发工程师

    本文源自:阿里云云效团队出品的《阿里巴巴DevOps实践指南》,前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年DevOps实践经验。

    云端开发指开发者可基于云平台完成编码、测试、发布等研发流程。一个完整的云端开发平台不仅是提供了一个云端的编码环境,还提供了一整套研发工具和配套设施,让开发者做到在云端即可完成应用程序的需求、编码、测试和运维的全生命周期管理。

    传统的本地开发的问题。

    如下图所示,在传统的开发模式中,企业研发人员通常在本地完成代码的编写和测试,然后把代码推送到远端服务器,通过一系列的构建和集,最终发布到生产环境,并持续利用线上的运维体系完成线上系统的监控和运维;同时,企业也会采集部分研发过程中的关键数据,用来度量团队及个人的效能。

    在这里插入图片描述

    随着各种软硬件技术逐渐更替,公司规模也越来越大,为了适应这种变化:

    • 公司需要不断为企业研发人员配备合适的本地研发工具(如:多核高内存的计算机设备、Mac 笔记本电脑),这些设备可能价值不菲,而且需要定期的更新换代;
    • 新加入的员工,在正式开始开发前,需要配置复杂的本地开发环境,安装特定的软件及插件,并熟悉项目的研发流程及各个线上系统;部分项目因为网络配置等问题,可能第一时间还无法在本地启动,还会耽误不少额外的配置及调试时间;
    • 公司需要投入较多的资源,才能构建起匹配管理者需求的效能度量系统和安全管控系统,并且因为云端体系天生对开发者本地环境的弱管控性,效果只能差强人意;

    阿里巴巴也不例外,随着近些年各项业务的飞速发展,人员的快速扩充,如何解决发展过程中带来的类似问题变得迫在眉睫。而云端研发作为一种新兴的技术形式,其独特的优势恰好可以用来解决上述问题。

    云端开发的典型应用案例

    案例 1:前端组件的开发

    在阿里内部,存在大量的基于 Node.js 构建的前端工程,这些前端工程普遍采用模块化的组织方式,在开发过程中会随着需求迭代产生众多的模块(或组件)。同时,有些前端工程会邀请业务方参与共建,即由提出功能需求的团队在大的标准下自行开发组件,并发布上线,在平台中集成自己的场景。

    在这样的背景下,组件的开发会被高度的抽象,大部分的步骤都可以由工具辅助完成(如下图中,业务开发人员只需要关注自己的业务逻辑即可),这样既提升了研发效率,又提升了组件的开发质量。

    前端组件开发过程:
    在这里插入图片描述
    云端开发的开箱即用,恰好可以解决类似的问题。开发者打开浏览器就是一个配置好的环境,实现零配置上手;而环境配置可以由项目组的资深同事维护,配置好针对某个项目的系统版本、程序运行时、SDK 和 IDE 插件集合。相比使用本地的研发工具,云端开发可以实现:

    • 研发流程的产品化,从组件的新建到最终的发布一气呵成,不用再在多个平台工具上来回跳转;
    • 屏蔽用户操作系统的差异,提供统一的研发环境,不用再解决 Windows/Mac 的差异,不用担心本地Node.js 的版本问题;
    • 所有环境都会预装好必要的开发提效工具,如:规约扫描和修复工具、预览调试工具、各环境发布工具等;
    • 充分释放本地磁盘空间,不用担心磁盘被 node_modules 占满;

    案例 2. 代码安全管控与研发过程数字化度量

    在政务、金融以及部分高科技企业的研发场景中,对代码的安全管控要求极其严格。但近几年,公司内部源代码泄露的事件时有发生,有的被明码标价进行出售,标价数十万甚至上百万美元;有的直接被公开在网络上,任何人都可以访问下载。一旦发生类似事件,将会直接或间接造成商业信息泄露及公司声誉受损。

    当使用本地开发时,源码的传输环境、本地的持久化介质不可控,对于员工有意泄露源码的行为似乎无可奈何。当使用云端开发时,一切都迎刃而解:开发者可以从代码库或需求直接打开网页开始云端开发,研发过程中代码不落本地磁盘,既能减少传输风险,又避免了员工本地环境被植入木马、从而在不知情的情况下泄露源码的可能;同时,在云端开发环境中可以对用户的浏览、拷贝行为做不同程度的管控,结合告警和系统自动拦截,可有效降低源码泄露的风险。

    在阿里内部,当涉及到对保密性要求极高的项目,或者当企业外部成员参与对代码保密性有要求的项目时,我们会推荐项目团队使用云端进行研发,从而有效防止源码的泄露。

    此外,随着越来越多的企业进入到数字化转型阶段,管理者期望能更加全面的看到企业员工的投入与产出,并且针对项目人员分布与研发过程效率做出更加及时的调整与改进。在过去,所有的数字化信息都依赖人工的反馈和统计,反馈的是否准确、统计过程中是否有纰漏都会直接影响管理层的判断。但如果把研发过程搬到云上,所有的研发过程数据就能生在云上、用在云上,想要借助数字化提升研发效率变得更加容易。

    在阿里内部,团队中经常会出现一名正式员工带领多名企业外部成员完成项目的情况。在需要对企业外部成员的工作进行绩效评定时,传统的评定方式通常是参考需求完成数量、代码缺陷率等指标,但实际工作中需求有大有小、有难有易,完全基于结果指标进行评定很难做到公平公正,让优秀的员工脱颖而出。借助云端开发,可以让所有研发过程中的数据也透明出来,如各需求的编码时长、临时版本发布次数、过程代码与最终有效代码的比例、单位时间代码产出量等。通过结合研发过程数据,也可以让绩效评定更加透明公正。

    总结

    云端开发具备灵活定制、开箱即用的特点,借助好这两个特性,就可以创新性的解决掉传统本地开发过程中的顽疾。除了上述两个案例外,我们认为,当前适合云端开发落地的场景还可以是:

    • 云原生场景中的轻量代码开发,如 Serverless 场景,这类场景中研发人员只需要集中式的编写业务逻辑,大量的框架类代码已被默认隐藏,并且调试、部署方式有别于传统研发过程,更适合云端开发的落地。
    • 各类垂直化的场景,这类场景通常需要有针对性的定制,与特定的线上系统进行打通,只要能利用好云端开发灵活定制的特性,就有望实现开发阶段 10 倍效能的提升。

    目前,阿里巴巴内部的云端开发平台目前已通过阿里云云效对外输出,前往ide.aliyun.com,秒级体验云端编码、代码智能补全等黑科技。在这里插入图片描述
    阿里巴巴合伙人和业界多位大佬力荐、何勉、陈鑫等17位阿里资深技术专家联袂出品、阿里十年DevOps经验沉淀总结、阿里巴巴DevOps落地实践一本通。

    前往:https://developer.aliyun.com/topic/devops,下载完整版电子书。

    云端开发在阿里的典型应用场景,云端开发指开发者可基于云平台完成编码、测试、发布等研发流程。一个完整的云端开发平台不仅是提供了一个云端的编码环境,还提供了一整套研发工具和配套设施,让开发者做到在云端即可完成应用程序的需求、编码、测试和运维的全生命周期管理。

    展开全文
  • 云端开发----基础概念

    2021-02-23 23:12:16
    html用于组织数据,而css则是对显示风格、样式上进行设计例子:...输入IP地址3.2两个工具1、django_admin:全局的管理工具2、manager.py3、管理django工程的三种方法3.3MTV开发模式M(模型):组织和存储数据的方法与数
  • 什么是开发?小程序实例超详细演示~

    千次阅读 多人点赞 2021-11-13 16:29:29
    八分钟读懂云开发_哔哩哔哩_bilibili 小姐姐带你30分钟创建并上线小程序项目【云开发实战】_哔哩哔哩_bilibili 参考资料: 微信开放文档 (qq.com) 云开发_百度百科 (baidu.com) 推荐阅读: 云原生推动全云开发与...

    学习视频

    参考资料

    推荐阅读

    项目源码:关注公众号BaretH后台回复 云开发 获取

    在这里插入图片描述

    当今时代,千行百业都在拥抱云计算和云原生,进行数字化创新和升级。我们也在前一篇文章中了解到底什么是云原生以及其一系列的技术栈与方法论,还不太了解的同学可以看看 硬核科普:到底啥是云原生?随着云和软件即服务的宏观趋势的结合及技术的进步,云原生给全生命周期带来了一个全新开发标准解决方案—云开发。本节内容我们就来聊聊云开发,并用云开发开发一个简单的微信小程序~本教程将围绕着腾讯云及其一系列服务展开。

    image-20211112112233920



    1. 什么是云开发

    百度百科:云开发(CloudBase)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维。同时云开发提供的静态托管、命令行工具(CLI)、Flutter SDK 等能力降低了应用开发的门槛。使用云开发可以构建完整的小程序/小游戏、H5、Web、移动 App 等应用。

    image-20211113162124162

    我们来理解一下官方定义中的最重要的两个概念:

    • 云端一体化的后端云服务:说白了就是云开发为开发者提供完整原生云后端服务支持,也就是我们开发已经在全部部署好的后端环境中进行,只需要由前端程序员专注于业务逻辑的编写,弱化了后端和运维的概念。
    • 一站式 Serverless 服务:serverless 即无服务,意思就是开发者无需购买数据库、存储等基础设施服务,无需搭建服务器即可使用,云开发已为上述服务提供了完整的云端支持,能轻松实现快速上线与迭代。

    那么为什么要使用云开发呢?

    • 因为云开发只关注业务逻辑,效率更高,开发成本也更低,直接以函数的形式调用云端服务。

    云开发有哪些应用场景呢?

    • 微信小程序

      云开发为小程序开发者提供完整的原生云端支持和微信服务支持。

    • 微信公众号/H5 应用/PC Web 应用

      云开发为 H5 类应用提供丰富 SDK 能力,可作为公众号后台,普通 H5 应用,H5 活动页,同时也支持作为 PC Web 后台应用,例如 Web 管理系统,Web 网站等。

    • 移动应用

      云开发推出了 Flutter SDK,在 iOS、Android 等移动应用平台中集成,可以方便使用云函数、云存储等能力



    2. 对比传统开发模式

    我们来对比一下云开发的模式与传统的开发模式:

    image-20211112122218654

    传统开发有5个步骤:首先产品经理对产品进行需求设计,然后由后端开发工程师针对需求进行API开发,再进行后端的部署上线,再由前端工程师完成前端页面设计与数据请求,最后才是正式发布。而云开发的只需要3个步骤:首先也是产品经理对产品进行需求设计,然后交给前端工程师进行开发,开发完成后即可正式发布。

    可以看到,传统开发模式对于产品开发周期是相对比较长的,而使用云开发大大减少了开发步骤与开发难度, 而是更注重于业务逻辑,使一个人实现全栈开发变得可能。而这一切的原因正是因为云开发提供完整的后端云服务,提供数据库、存储、函数、静态托管等基础能力,以及扩展能力;无需管理基础架构。相比较传统的开发模式,云开发至少可节省50%的人力成本、交付效率提升70%。

    云开发与传统的前后端开发模式天然互补。基于云开发构建应用层/服务中台,能够弥补传统开发模式的“效率低、耗时多、依赖后台、不够灵活”等问题,更快响应业务需求。



    3. 云开发的三个重要部分

    1. 云存储:高扩展性、低成本、可靠和安全的文件存储服务,可快速的实现文件上传下载、文件管理功能。

    2. 云函数:在腾讯云基础设施上弹性、安全地运行云端代码,提供的云函数能力无需购买、搭建服务器即可快速运行开发者自定义函数。

      函数通俗来说就是能重复使用的,实现了某个功能的代码块,也就是为了实现某个功能而提前将代码封装好。而云函数就是将函数放在了云端。

    3. 云数据库:高性能的数据库读写服务,可以直接在客户端对数据进行读写,无需关心数据库实例和环境



    4. 云开发服务介绍

    随着云开发的快速接入,开发者可以直接以函数的形式调用并使用已经集成好的服务,比如音视频服务(提供高品质、实时音视频通话服务)、智能图像服务(集成智能鉴别、人脸识别等AI能力),当然不仅如此,还有很多其他的技术集成服务,通过云开发我们可以直接腾讯的技术团队过去数十年在人工智能、图像处理、音视频服务等领域积累下来的技术积累,这样可以大大在传统模式下对先进技术摸索的时间。

    因此使用云开发,就是站在腾讯技术团队这个巨人的肩膀上去利用技术解决产品的需求。



    5. 使用云开发的开发流程

    使用云开发进行小程序、小游戏开发的基础步骤十分简单,如下图所示:

    image-20211112123409107

    接下来我们以一个简单的微信小程序为例,带大家体验一下云开发的魅力!



    6. 云开发实例—小程序实战

    1. 项目介绍

    该项目分为三个页面:首页、日志页面、我的页面。我的页面点击登录会展示用户头像和用户昵称,在首页点击+1或者-1的按钮,在日志页面会同步显示我们点击的日志。
    在这里插入图片描述


    2. 创建项目、云开发初始化、页面初始化

    云开发小程序可以理解为微信官方为我们提供了一个免费的服务器并帮我们部署好了小程序环境,它将服务器的一些功能比如增删改查操作都封装成了接口供我们直接操作,对于小程序的上线访问,我们也不需要自己的域名和服务器,一件部署即可让别人通过微信搜索到并访问。

    创建云开发项目首先需要 注册一个小程序账号 并且下载 微信开发者工具

    首先我们来创建一个小程序项目,首先起一个项目名称,然后填入AppID,也就是小程序ID,注意后端服务这里选择不使用云服务, 因为如果选择微信云开发的话,系统会为我们创建许多使用不到的模版,删除比较麻烦,所以我们选择不使用云服务,自己去配置云开发的环境。模版选择的话选择不使用模版。

    image-20211112180527515

    创建完成后如下图所示,然后我们点击云开发按钮开通云开发的功能服务。

    image-20211112180722120

    然后我们新建一个环境,这里设置为test,然后会对应一个唯一环境ID,这样云开发的后台就创建完成。

    image-20211112181144582

    接下来来进行云开发的初始化,我们在项目根目录下添加一个云开发的文件夹cloud,然后在project.config.json中配置该文件夹的路径。

    image-20211112181610754

    保存 project.config.json 文件后,即可看到 cloud 文件夹上有云的标志以及当前的云环境

    image-20211112181908077

    然后我们删除 app.js 文件中 onLauch() 方法中的所有代码,然后我们在其中添加代码,指定云开发的环境。

    // app.js
    App({
     onLaunch() {
        wx.cloud.init({
          env: 'test-0gk0wv6540874698',  // 用env指定云开发环境id
          traceUser: true  // 表示将用户访问接入到用户管理中
        })
     }
    })
    

    接下来我们进行页面的初始化,默认已经包含了indexlogs页面,还缺少一个me我的页面,我们在 pages 目录下新建me文件夹,然后在me文件夹新建一个名为 me 的 page,这样就会在 me 文件夹下生成四个 me 的文件,在 app.json 中的 pages 对象里面也会自动将 me 页面的路径加上。

    image-20211112185217811

    然后我们再新建一个 images 文件夹来存放图片,我们将准备好的照片粘贴进去。

    image-20211112191016892

    接下来我们在 app.json 文件中修改一下导航栏的标题和颜色,然后加上一个tab底部导航栏

    {
      "pages": [
        "pages/index/index",
        "pages/logs/logs",
        "pages/me/me"
      ],
      "window": {
        "backgroundTextStyle": "light",
        "navigationBarBackgroundColor": "#EA5149",	// 导航栏背景颜色
        "navigationBarTitleText": "BaretH",	// 导航栏标题
        "navigationBarTextStyle": "black"
      },
      "tabBar": {	// 底部导航栏配置
        "list": [{
          "pagePath": "pages/index/index",	// 页面路径
          "text": "首页",	// 标题
          "iconPath": "images/binggan.png",	// 不点击时显示的图片
          "selectedIconPath": "images/binggan-active.png"	// 点击时显示的图片
        }, {
          "pagePath": "pages/logs/logs",
          "text": "日志",
          "iconPath": "images/danhuang.png",
          "selectedIconPath": "images/danhuang-active.png"
        }, {
          "pagePath": "pages/me/me",
          "text": "我的",
          "iconPath": "images/huasheng.png",
          "selectedIconPath": "images/huasheng-active.png"
        }]
      },
      "style": "v2",
      "sitemapLocation": "sitemap.json",
      "lazyCodeLoading": "requiredComponents"
    }
    

    编辑完保存即可看到效果

    image-20211112195548261


    3. 登录功能(云函数创建和调用)

    登陆功能的实现在 me 页面中完成,首先删除 pages/me/me.wxml中的内容,然后我们添加一个登陆按钮

    <button open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo">登陆</button>
    

    image-20211112221539743

    这里登陆按钮绑定了一个onGotUserInfo方法,我们在该方法里获取用户信息,我们清空 me.js 的内容,在其中实现该方法

    Page({
      data: {
        userInfo: {} // 保存用户信息的变量
      },
      onGotUserInfo: function (e) { // 一定要传递参数e
        this.setData({
          userInfo: e.detail.userInfo // 将用户信息保存在userInfo里面
        })
        console.log(this.data.userInfo)
      }
    })
    

    这里将获取到的用户进行进行打印来判断是否成功:可以看到成功获取到了用户信息,但是缺少最终的 openID 信息,他是用户身份信息的唯一标识

    image-20211112215519642

    openID 属于比较私密的信息,我们需要通过wx服务器获取,也就是需要通过云函数来获取,我们在 cloud 文件夹下来新建一个云函数 login

    image-20211112215846355

    然后系统为自动帮我们创建以下三个文件,其中我们主要进行操作的就是index.js文件

    image-20211112215938666

    查看默认的 index.js,可以看到默认创建的代码里面已经获取了 openID,我们只需要留下这一行代码即可

    image-20211112220251914

    云函数修改完成后,一定要右键点击该函数选择上传和部署才能使用

    image-20211112220419612

    然后我们需要修改 me.js,在其中调用云函数来获取 openID 信息

    Page({
      data: {
        userInfo: {}, // 保存用户信息的变量
        openID: "" // 保存用户openID信息
      },
      onGotUserInfo: function (e) { // 一定要传递参数e
        const that = this // 保存this对象
        // 调用云函数
        wx.cloud.callFunction({
          name: "login",
          success: res => {
            console.log("云函数调用成功")
            that.setData({
              openID: res.result.openid, // 将用户openID保存在opendID里面
              userInfo: e.detail.userInfo // 将用户信息保存在userInfo里面
            })
            console.log(this.data.userInfo, this.data.openID)
          },
          fail: res => {
            console.log("云函数调用失败")
          }
        })
      }
    })
    

    然后我们进行测试,可以在控制台看到成功获取了 userInfo 和 openID

    image-20211112221502883

    然后我们编写 me.wxml 文件,实现如果获取到 openID 就不显示登陆按钮,如果没有获取到 openID 就显示用户头像和昵称

    <view wx:if="{{!openID}}">
      <button open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo">
        登陆
      </button>
    </view>
    <view class="uploader-container" wx:if="{{openID}}">
      <image class="image" src="{{userInfo.avatarUrl}}"></image>
      <view class="name">{{userInfo.nickName}}</view>
    </view>
    

    对应的样式文件 me.wxss

    /* pages/me/me.wxss */
    
    .image {
       width: 100px;
       height: 100px;
       margin: 0 auto;
       display: block;
       padding-top: 20px;
    }
    
    .name {
       text-align: center;
       padding-top: 10px;
    }
    
    button {
       background: #ea5149;
       width: 60%;
       margin-top: 100px;
       color: #fff;
    }
    

    然后我们保存测试,点击登陆即可显示用户头像和昵称。

    image-20211112224324273

    但是此时还是有一个问题,就是当我们刷新页面后,这里点击编译,获取到的用户信息就会清空

    image-20211112224454027

    如果我们想要刷新后还能保持用户的登录状态,我们应该将用户信息存入缓存中,这样用户信息只需要从缓冲中获取即可,而不需要每次重新请求后端进行获取。

    这里通过首先将 userInfo 和 openID 合并到一起,将 openID 作为 userInfo 的一个字段存入,然后将 userInfo 通过云函数存入缓存中。最后新增一个 onLoad 方法,用于在页面加载的时候就获取用户信息并赋值给 userInfo 变量

    image-20211112230711104

    完整代码如下:

    Page({
      data: {
        userInfo: {}, // 保存用户信息的变量
        openID: "" // 保存用户openID信息
      },
      onGotUserInfo: function (e) { // 一定要传递参数e
        const that = this // 保存this对象
        // 调用云函数
        wx.cloud.callFunction({
          name: "login",
          success: res => {
            console.log("云函数调用成功")
            that.setData({
              openID: res.result.openid, // 将用户openID保存在opendID里面
              userInfo: e.detail.userInfo // 将用户信息保存在userInfo里面
            })
            that.data.userInfo.openID = that.data.openID // 将openID作为一个字段加入userInfo中
            console.log(that.data.userInfo)
            wx.setStorageSync('userInfo', that.data.userInfo) // 将userInfo保存至缓存中
          },
          fail: res => {
            console.log("云函数调用失败")
          }
        })
      },
      // 页面加载时执行
      onLoad: function (options) {
        // 从缓存中获取userInfo
        const userInfoFromStorage = wx.getStorageSync("userInfo")
        this.setData({
          userInfo: userInfoFromStorage,
          openID: userInfoFromStorage.openID
        })
      }
    })
    

    然后我们再次测试,可以看到调试器storage缓存中有userInfo信息,并且我们点击编译,用户仍处于已经登陆状态

    image-20211112231325594


    4. 点击按钮生成记录数据(云数据库的插入)

    该部分主要操作index文件夹,首先清空 index.wxml 文件,然后添加两个标签

    <view class="container">
      <view class="right button">+1</view>
      <view class="left button">-1</view>
    </view>
    

    然后清空 index.wxss,编写对应的样式文件

    .button {
      width: 70px;
      height: 70px;
      line-height: 70px;
      border-radius: 20%;
      border: none;
      text-align: center;
      font-size: 25px;
      color: #fff;
      font-weight: bold;
      margin-top: 50px;
    }
    
    .right {
      background: #ea5149;
      float: right;
    }
    
    .left {
      background: #feb600;
    }
    

    到此基本页面编写完成

    image-20211112232337758

    然后我们修改 index.wxml,给这两个标签绑定两个函数,并设置对应的参数:

    <view class="container">
      <!--bindtap绑定点击事件addLog()方法 传递参数data-add  add是自己定义的-->
      <view class="right button" bindtap="addLog" data-add="1">+1</view>
      <view class="left button" bindtap="addLog" data-add="-1">-1</view>
    </view>
    

    然后清空 index.js,在其中添加绑定的 addLog 方法:

    Page({
      // event表示前端传过来的参数
      addLog(event) {
        // 获取add参数
        const add = event.currentTarget.dataset.add
        console.log(add)
      }
    })
    

    然后我们在调试器进行测试,可以看到点击 +1 按钮控制台就打印 1,点击 -1 按钮控制台就打印 -1

    image-20211112235903408

    接下来我们将这些数据插入到数据库中,我们进入云开发的后台,点击数据库,然后添加一个集合logs

    image-20211113000107298

    然后设置集合的权限为:所有用户可读、仅创建者可写

    image-20211113000139001

    设置完成后,我们新建一个云函数createlog,功能就是向前面创建的 logs 集合中插入数据,数据形式包含三个字段:add参数、点击时间、点击者的open ID。我们修改其中的 index.js 文件:

    image-20211113112520325

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    cloud.init({
      env: 'test-0gk0wv6540874698'
    })
    const db = cloud.database() // 获取数据库连接对象
    
    // 云函数入口函数(event从前端传s递来的数据)
    exports.main = async (event, context) => {
      try {
        // await搭配async-->异步等待:需要执行完await后的语句,才可以往下执行
        return await db.collection('logs').add({ // db-数据库、指定logs集合 在集合中创建一条语句add
          data: { // 插入的数据放在data中
            add: event.add, // 点击的参数
            date: event.date, // 点击时间 
            openID: event.openID // 点击者的openID
          },
          success: function (res) {
            // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
            console.log(res)
          }
        })
      } catch (e) {
        console.log(e)
      }
    }
    

    编辑完成后记得右键上传部署:

    image-20211113001043123

    然后我们回到pages/index/index.js来调用上述craetelog云函数,传送上述 data 中的三个字段信息

    Page({
      // event表示前端传过来的参数
      addLog(event) {
        // 获取add参数
        const add = event.currentTarget.dataset.add
        console.log(add)
        // 获取缓存信息
        const ui = wx.getStorageSync("userInfo")
        // 根据缓存判断用户是否登陆
        if (!ui.openID) {
          // 如果没有登陆跳转到me我的页面
          wx.switchTab({
            url: '/pages/me/me',
          })
          // 如果已经登陆则请求云函数createlog向数据库中插入data
        } else {
          wx.cloud.callFunction({
            name: "createlog",
            data: {
              add: add,
              date: Date.now(),
              openID: ui.openID // 从缓存中获取到openID字段
            }
          })
        }
      }
    })
    

    编写完成后我们进行测试,点击 +1、-1 的按钮即可在云数据库中看到数据的变更:

    image-20211113112610026


    5. 将记录数据展示到页面上(云数据库的读取)

    接下来我们将插入的这些数据展示到日志页面中,该部分主要操作logs文件夹

    我们同样适用云函数来获取数据,首先新建一个 Node.js 云函数,命名为getlog,然后编写其中的index.js 文件,在其中实现通过前端传递过来的 openID 字段来获取用户所有的日志信息。

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    cloud.init({
      env: 'test-0gk0wv6540874698'
    })
    const db = cloud.database() // 初始化数据库
    
    // 云函数入口函数
    // 功能:通过从前端传递过来的openid字段获取用户的所有信息
    exports.main = async (event, context) => {
      try {
        return await db.collection('logs').where({ // 查询语句
          openID: event.openID
        }).get()
      } catch (e) {
        console.log(e)
      }
    }
    

    编写完成记得保存并上传部署,接下来修改pages/logs/logs.js文件,在其中调用 getlogs 云函数,其中要传送用户的 openID 信息,并且当 getlogs 函数执行成功时我们将获取到的日志信息存储在 logs 变量中

    // logs.js
    const util = require('../../utils/util.js')
    
    Page({
      data: {
        logs: []
      },
      getlogs: function () {
        const that = this
        const ui = wx.getStorageSync("userInfo") // 从缓存中获取userInfo
        // 通过缓存中的openID判断用户是否登陆
        // 用户未登录则跳转到me页面
        if (!ui.openID) {
          wx.switchTab({
            url: '/pages/me/me',
          })
          // 用户已登陆则调用getlogs云函数
        } else {
          wx.cloud.callFunction({
            name: "getlogs",
            // data对象——需要向getlogs云函数传递openID数据
            data: {
              openID: ui.openID
            },
            // 云函数执行成功
            success: res => {
              console.log("res", res)
              that.setData({ // 给logs数组赋值---数组处理使用map
                logs: res.result.data.map(log => {
                  // 格式化date变量 调用util中的formatTime()方法
                  var date = util.formatTime(new Date(log.date))
                  log.date = date //更新数据
                  return log
                })
              })
            },
            // 云函数执行失败
            fail: res => {
              console.log("res", res)
            }
          })
        }
      },
      // onLoad 页面首次加载的时候执行
      // onShow 页面每次切换的时候执行
      onShow: function () { // 使用onShow声明周期函数设置在页面加载的时候会自动执行
        this.getlogs()
      }
    })
    

    然后我们修改一些logs.wxml页面,遍历 logs 变量,展示信息

    <!--logs.wxml-->
    <block wx:for="{{logs}}" wx:key="log">
      <view class="log-item">
        日期:{{item.date}} 分数:{{item.add}}
      </view>
    </block>
    

    然后我们进行测试即可看到已经成功实现:

    在这里插入图片描述


    6. 项目部署上线

    到此小项目已经完成了,最后我们将其部署上线,首先我们来真机调试一下,点击如下按钮然后在手机上进行测试:

    image-20211113121221605

    手机上测试没有问题后,点击右上角的上传按钮进行上传

    image-20211113121425185

    上传成功后我们就可以在小程序管理后台中的管理/版本管理中的开发版本模块看到刚上传的信息了,我们点击其中的体验版再用手机测试一下,如果没有问题就可以提交审核了,提交审核后就会在审核版本模块看到审核信息,然后就需要等待微信团队进行审核(一般1~2天),审核通过后会以公众号的方式通知您审核通过,然后我们点击提交发布,然后等待1~2个小程序部署的时间后,其他人就可以在微信中搜到你的小程序啦!

    image-20211113122110928

    展开全文
  • 云端-Web应用开发

    2018-11-16 10:21:27
    云端-Web应用开发.zip,云端-Web应用开发,Web应用参考资料,JavaScript使用手册.chm,JavaScript高级程序设计(第3版).pdf,ChromeStandalone_65.0.3325.181_Setup.exe,示例代码-仪表盘.js,MQTT客户端-安装包.exe,示例...
  • 云端协作开发实战体验

    千次阅读 2022-03-15 16:48:39
    最近我在负责福音联盟外包给中国团队的一个独立站的开发。我这边负责开发,美国同事负责提供服务器资源,他们中国机构的负责人(PM)负责验收功能,其它地区的编辑负责录入内容。项目的架构主要有三个独立的服务组成...

    最近我在负责福音联盟外包给中国团队的一个独立站的开发。我这边负责开发,美国同事负责提供服务器资源,他们中国机构的负责人(PM)负责验收功能,其它地区的编辑负责录入内容。项目的架构主要有三个独立的服务组成:

    • WordPress:作为内容管理后台,给编辑们发布文章提供内容;
    • 数据库:Mysql数据库,两个服务都访问同一个数据库,WordPress主要负责写,官网负责读。
    • 独立官网:展示内容,因为定制需求比较多,所以使用Java(Spring Boot + Thymeleaf)独立开发;

     大家平时沟通基本都是邮件,申请测试服务器的流程太长太耗时,所以一开始我只申请了开通链接测试数据的权限,在自己电脑上开发。然而。。。离上线还有两天,刚拿到公司的新MacBook,就接到紧急出差北京的任务,这来回十几个小时,可不能浪费,不然就悲催地delay了…

    我打算利用路上的时间,赶完最后的开发和联调。目前我自己的部分已经完成,进入了联调和验收阶段,但是在新MacBook上需要下载软件、配置开发环境、构建依赖等,网速怕是不够稳,时间也来不及。自己平时也关注云原生领域,记得有些协作开发工具,或许可以很快地解决问题。

    首先,我用Pylon解决了写代码之前准备工作。 打开笔记本,用手机热点连上网,登录TeamCode(www.teamcode.com),点击创建Pylon,授权和输入Git仓库地址后,5秒钟左右创建了Java项目的开发环境,相当于给了一台虚拟的Linux机器(我选了默认的1核2G),并把代码Pull下来。

     

     Pylon检测到我的项目是Java,默认装好了Git和Maven,它支持VSCode链接和Cloud-IDE直接编码。因为目前基础业务和样式我都开发完了,只是做些微调和修复bug,所以不下载IDE也可以,我就直接用Cloud-IDE打开了。

    打开后还需要先mvn install构建一次才能启动,我一开始还担心要构建的话需要下载不少依赖,根据之前的经验,起码也得20分钟,我这手机热点恐怕扛不住,后来才意识到这不是一台远程机器吗?用的是服务器的网络和算力,和我本地无关,哈哈…输完命令看到开始下载依赖,我就合上笔记本就开始检票上车了,虽然和我想的一样,到了位置上已经构建成功,一切都准备就绪了,但我还是小激动了一把,启动服务后,在高铁上花了2个小时修完了所有的bug,但现在是怎么让PM验收,我还没申请服务器,更别说配置Jenkins了。

    接着,我用Tin快速发布了一个应用,解决采购测服和部署的工作。 那就再用他们的Tin产品来封装和发布。这是一个应用封装的产品,反正PM只看效果也不改代码,我就把刚才的修改提交到Git仓库,然后给PM创建了一个Tin。

     

    我自己启动Tin并验证没问题后,通过发了个邀请链接给他,告诉他只需要加入我的工作空间,点击这个Tin的Endpoint就可以访问,Tin还可以Upgrade,待会我如果再做修改也可以快速的重新部署。 

    邮件发好后正好快到站了,赶紧休息一会儿,就等他反馈吧。

    小插曲

    和之前我预想的一样,PM通过Tin快速体验和提Issues,我在云上用Cloud-IDE + Pylon开发修复,邮件几次来回后,基本都验收完了,安心的度过了第一晚。

    第二天忙完已经是下午5:00,正赶回上海高铁,又突然给我发了一个bug,刚发现某个页面的JS的一个方法和全局的方法冲突了,导致打不开!!!这离下班发版还有1个小时,我在地铁上没位置,站着根本写不了代码,哪里有时间修复,要是让大家因为我加班发版,这.....眼看又要Delay了,我就想让公司前端帮帮忙,于是厚着脸皮给他发了个邀请链接,微信上“强迫”他赶紧加入我的工作空间,答应请他吃一顿大餐作为回报,告诉他不用配环境、不用构建,直接可以改,才说动了他。接着就语音教他启动Pylon,Cloud-IDE打开就开始改了。

     

     

     他水平还是不错的,10分钟帮我搞定了。然后我更新了Tin应用,让PM验收,最后顺利的在6点钟发版了。

    总结

    出差两天让我完整体验了一次云端协作开发,最重要的是按时交付了工作,周末可以不用加班了。总结一下,我觉TeamCode的产品在这几个场景上可以帮助到大家:

    1.需要比较灵活的开发模式,例如更换设备,在出差、家里公司不停切换场地时可以用Cloud-IDE +Pylon,因为资源在云上,免环境配置,让开发变得很灵活,可以第一时间进入开发状态;

    2.快速的封装和部署,例如快速验收功能,做DEMO演示,技术交流,让对方快速POC等,可以用Tin帮助你部署,给对方使用,我这次就用来给PM快速验收,省去了采购测试服务器的费用和时间;

    3.需要多人协同开发,例如找人帮你找出或解决bug,跨时区、地区协同开发又没有7x24的运维团队时,可以在TeamCode上按照自己的节奏启动和调用服务,大部分运维工作都已经自动化了。

    感谢你读到这里,欢迎留言交流,如果对你有用的话可以给个赞支持或者转发!

    展开全文
  • 开发者必备的8个最佳云端集成开发环境.pdf
  • 云端获取Arduino的输入,而无需管理服务器端。
  • ;系统Topic;系统Topic 产品创建;系统Topic 产品创建;系统Topic 产品创建;系统Topic 设备创建;系统Topic 设备创建;系统Topic 设备创建;系统Topic 设备三元组信息;系统Topic 产品物模型定义;系统Topic 产品物模型定义 ...
  • Cloud Studio是腾讯云推出的一款云端开发工具,也就是通过浏览器就可以开发程序。下载开发IDE,如果是前端开发,一般就是VS Code或者WebStorm,如果是Java后端开发,一般就是IDEA或者Eclipse。配置环境,包括语言的...
  • CF-IOT是一款成熟可靠的商业物联网开发框架,集成众多实用API,并提供LUA脚本运行环境,具有非常强的可伸缩能力
  • ST发布可连接云端的STM32开发工具套件.pdf
  • 华为云物联网云端开发教程
  • 云端开发随思

    2017-02-06 17:02:20
    商业化的的云端虽然屏蔽了网络部署规划等问题,可以更加专注于软件体系的开发而不必为硬件费心思。然而有利也有弊商业化云端由于利润的驱动,必然会有将硬件最大化的利用,会有多个用户分享硬件的情况,对于云端给出...
  • 不错的参考资料哦!
  • 从你写下第一行代码到整个持续的运维,APM都是不可或缺的工具。在国外,APM已成为ITOperation的...借助OneAPM,开发者可以提升开发速度、让应用更快发布,并且能精准定位使用体验中的瓶颈。据蓝海讯通介绍,OneAPM的
  • 《网店管家云端版》独立接口开发文档.pdf
  • 阿里云物联网平台-设备端与云端开发.pdf
  • WebIDE即云端开发环境。开发者可以通过浏览器在线进行代码编辑,并通过WebIDE提供的终端环境运行代码,执行命令,省去本地环境安装配置的麻烦,畅享云端办公的便捷性。 在使用BuildRun低代码应用开发平台的过程中...
  • 在云开发中,使用云函数会有很多坑。 1.调用云函数的时候,云函数调试时返回值不是null,但是到了前端拿到的result却是null。 2.调试云函数,本地调试和云端测试/真机测试结果不一样。表现为本地测试正常运行,云端...
  • 2018年中国云计算行业场现状及发展趋势分析云端开发逐渐成为软件开发行业主流.docx
  • 聊聊开发工具的云端化.pdf
  • 一、XpmJS 是啥XpmJS可以链接任何云端资源,为小程序、移动应用提供云资源通道和后端能力。降低开发门槛,提升小程序的开发效率。无需编写后端代码,即可实现用户登录、WebSocket 通信、微信支付、云端数据表格、文 ...
  • 能够连接云端的STM32开发工具套件.pdf
  • Java云端办公管理系统后端源码 Java云端办公管理系统后端源码 Java云端办公管理系统后端源码 Java云端办公管理系统后端源码 Java云端办公管理系统后端源码 Java云端办公管理系统后端源码 Java云端办公管理系统...
  • 【PYC01】云端开发基础 PYC01V01 单元开篇 HD PYC01V01 单元开篇 SHD PYC01V02 云端开发全栈技术简介 HD PYC01V02 云端开发全栈技术简介 SHD PYC01V03 HTML技术理念及发展简介 HD PYC01V03 HTML技术理念及发展简介 ...
  • Android前高管开发云端手机:提供100GB云空间.pdf
  • 006_UML建模與AIDL_Service應用程序開發.pdf 007_JNI與VM介紹.pdf 008_Java與JNI Native溝通.pdf 009_多線程的JNI Native.pdf 010_開發Android的C++核心服務.pdf 011_Button和View的客製化.pdf 012_ContentProvider...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,567
精华内容 33,026
关键字:

云端开发是什么