微信小程序基础概念

小程序云开发的三大基础能力:云数据库、云函数、云存储

Java、NodeJS、JavaScript、HTML5、CSS3、VueJs、ReactJs、前端工程化、前端架构

小程序开发入门基础,开发流程,云开发的使用,独自完成小程序开发

什么是小程序:小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。

小程序开发成本低,周期短,维护升级简单,推广成本低。

JSON全局配置,项目配置

云开发,云数据库,云函数,云存储

用户登录

如何通过云函数获取openid

传统微信登录,与,云开发微信登录

如何获取用户信息

电影列表

如何云函数调用第三方api

云函数调用api,与,小程序调用api

渲染列表

电影评价

云数据库插入数据

选择相册图片或拍照

云存储的图片上传

[外链图片转存失败(img-jYxyowEn-1564706541650)(https://upload-images.jianshu.io/upload_images/11158618-4cae2d96d66f0463.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-cCz9KZnG-1564706541652)(https://upload-images.jianshu.io/upload_images/11158618-65d38fd32283e250.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

.json配置文件,以json格式存储一些配置

.wxml模板文件,描述页面结构,相当于HTML

.wxss样式文件,调整页面样式,相当于css

.js脚本逻辑文件,页面和用户的交互逻辑

配置文件json

project.config.json:项目配置

app.json:全局配置

page.json:页面配置

页面结构wxml

页面样式wxss

页面交互js

// app.json
pages/base/base
pages/cloud/cloud

页面结构wxml

<image src="{{img}}"></image>
<view wx:for="{{arr}}" wx:key="{{index}}">
{{index}}{{item}}
</view>
<view wx:for="{{list}}">
{{item.name}}{{item.age}}
</view>

now you can provide attr ‘wx:key’ for a ‘wx:for’ to improve performance.

wx:if=""

hidden="{{}}"

之间差别

[外链图片转存失败(img-ha6xElbU-1564706541654)(https://upload-images.jianshu.io/upload_images/11158618-77a16467026d41b8.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

wxss是一套用于小程序的样式语言,描述wxml组件样式。

尺寸单位:rpx

可以根据屏幕宽度进行自适应,适配不同宽度的屏幕

onTapHandler: function() {
// this.data.count++; count: this.data.count + 1
},

[外链图片转存失败(img-siosyaYX-1564706541661)(https://upload-images.jianshu.io/upload_images/11158618-2e39218a2d4cf8de.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-VD22PUhS-1564706541663)(https://upload-images.jianshu.io/upload_images/11158618-b9df06472147de0c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-U7m92jQc-1564706541668)(https://upload-images.jianshu.io/upload_images/11158618-e76c184ee48a9c9d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-dDpI8wRN-1564706541669)(https://upload-images.jianshu.io/upload_images/11158618-d3ad485e2968a6a6.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-hj70xt8I-1564706541670)(https://upload-images.jianshu.io/upload_images/11158618-e2d5e39c483129af.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-tBh4sfJH-1564706541673)(https://upload-images.jianshu.io/upload_images/11158618-e459b403d4fa90b6.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-OoPuaOSI-1564706541674)(https://upload-images.jianshu.io/upload_images/11158618-80cdd06cfae9e396.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-rEqDBgea-1564706541675)(https://upload-images.jianshu.io/upload_images/11158618-57018d2fdb21e16c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

云数据库

[外链图片转存失败(img-kWIc0Fqn-1564706541680)(https://upload-images.jianshu.io/upload_images/11158618-e41c9fefde5e4de2.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-Z0UTZpQw-1564706541684)(https://upload-images.jianshu.io/upload_images/11158618-6251ab8784274e2b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-oI7AekIo-1564706541685)(https://upload-images.jianshu.io/upload_images/11158618-9ae4577ece8b019c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-m0BiSE2a-1564706541686)(https://upload-images.jianshu.io/upload_images/11158618-ab8d7c6729e32485.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-i69C18eX-1564706541689)(https://upload-images.jianshu.io/upload_images/11158618-1caf6c739fbcd222.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-4vdYhsS7-1564706541690)(https://upload-images.jianshu.io/upload_images/11158618-68d1b0758146b0fc.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-hVsfZywV-1564706541692)(https://upload-images.jianshu.io/upload_images/11158618-ee08fdcaf69a6332.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

cloud.js
const db = wx.cloud.database(); // 初始化 wxml
<button bindtap="insert">插入数据库</button> 创建数据库
user insert: function() {
db.collection('user').add({
data: {
name: 'dashu',
age:20
},
success: res => {
console.log(res);
},
fail: err => {
console.log(err);
}
})
} insert: function() {
db.collection('user').add({
data: {
name: 'jack',
age: 12
}
}).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
})
},
<button bindtap="update">更新数据</button>
update: function() {
db.collection('user').doc('_id').update({
data: {
age:23
}
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
},
search: function() {
db.collection('user').where({
name: 'yerry'
}).get().then(res=> {
console.log(res);
}).catch(err=>{
console.log(err);
});
}

[外链图片转存失败(img-cOaJ3LED-1564706541693)(https://upload-images.jianshu.io/upload_images/11158618-0feac740ae548b21.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-2fQ6mwdc-1564706541697)(https://upload-images.jianshu.io/upload_images/11158618-792b5d282dc0f8c4.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

云函数:

[外链图片转存失败(img-zFDWBRYR-1564706541701)(https://upload-images.jianshu.io/upload_images/11158618-90b5f638ef2b02c1.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

求和函数sum()

获取当前用户的openid

批量删除云数据库的数据

[外链图片转存失败(img-BxFoVUeE-1564706541701)(https://upload-images.jianshu.io/upload_images/11158618-9a463d55e3056c96.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-mwKV0lQR-1564706541702)(https://upload-images.jianshu.io/upload_images/11158618-83bf186bf8b5408e.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

wx-server-sdk

服务器sdk

[外链图片转存失败(img-AYnye8Rx-1564706541703)(https://upload-images.jianshu.io/upload_images/11158618-4afdb05d0bf91cfc.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

在终端中:

npm install --save wx-server-sdk@latest
index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async(event, context) => {
const wxContent = cloud.getWXContent()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}

修改

sum
// index.js
// 云函数入口函数
exports.main = async (event, context) => {
return {
sum: event.a + event.b
}
}
<view>云函数</view>
<button bindtap="sum">调用云函数sum</button>
sum: function() {
wx.cloud.callFunction({
name: 'sum',
data: {
a: 2,
b: 3
}
}).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
});
},

获取当前用户openid

<button bindtap="getOpenId">获取当前用户openid</button>
getOpenId: function() {
}

传统的微信登录方式

用户端小程序

微信服务器

后端服务器

用户端的小程序发送请求

通过wx.login获取code

在微信的服务端获取一个code

在从用户端小程序

调用wx.request将code传递给后端服务器

后端服务器

使用code换取openid和session_key

最后将用户的标识发送给小程序本地存储

云开发微信登录

用户

小程序

云函数

云数据库

用户通过点击获取用户信息

用户-》小程序

小程序-》云函数

获取用户信息

云函数-》小程序

返回用户信息

小程序-》云数据库

通过小程序将用户信息存储到云数据库

// login
index.js
const cloud = require('wx-server-sdk') // 初始化 cloud
// 小程序用户openid返回小程序端
// event参数包含小程序端调用传入的data
exports.main = (event, context) => {
console.log(event)
console.log(context)
const wxContext = cloud.getWXContext() // 获取WXContext(微信调用上下文)
// 包括OPENID,APPID,UNIONID return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
// cloud
// cloud.js cloud.json cloud.wxml cloud.wxss
getOpenId: function() {
wx.cloud.callFunciton({
name: 'login'
}).then(res => {
console.log(res);
}).catch(err=>{
console.log(err);
});
}

[外链图片转存失败(img-b3Hgy8w4-1564706541704)(https://upload-images.jianshu.io/upload_images/11158618-af9bbe1e3ff26232.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

// batchDelete
const cloud = require('wx-server-sdk')
cloud.init()
const db=cloud.database();
// 云函数入口函数
exports.main = async (event, context) => {
try{
return await db.collection('user').where({
nme: 'dashu'
}).remove();
}catch(e) {
console.error(e);
}
}

[外链图片转存失败(img-Z3fnrlBc-1564706541708)(https://upload-images.jianshu.io/upload_images/11158618-ad38283d60002ebd.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

batchDelete: function() {
wx.cloud.callFunction({
name: 'batchDelete'
}).then(res => {
console.log(res);
}).catch(err => {
console.error(err);
});
},

[外链图片转存失败(img-YbKoRhpG-1564706541710)(https://upload-images.jianshu.io/upload_images/11158618-74820af97050e421.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

云存储

wx.cloud.uploadFile 上传文件

wx.cloud.downloadFile 下载文件

wx.cloud.deleteFile 删除文件

wx.cloud.getTempFileURL 获取临时连接

文件上传

用户,小程序,云存储,云数据库

用户选择图片或拍照到小程序

小程序上传所选图片到云存储

云存储返回fileID到小程序

小程序通过fileID存储到云数据库

<view>云存储</view>
<button bindtap = "upload">上传图片</button>

wx.chooseImage(Object object)

从本地相册选择图片或使用相机拍照

upload: function() {
// 选择图片
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success(res){
const tempFilePaths = res.tempFilePaths
console.log(tempFilePaths); wx.cloud.uploadFile({
cloudPath: new Date().getTime() + '.png', // 上传到云端的路径
filePath: tempFilePaths[0], // 小程序临时文件路径,数组
success: res => {
console.log(res.fileID)
db.collection('image').add({
data: {
fildID: res.fileID
}
}).then(res => {
console.log(res);
}).catch(err => {
console.error(err);
})
},
fail: console.error
}) }
})
}

[外链图片转存失败(img-03YDPShk-1564706541713)(https://upload-images.jianshu.io/upload_images/11158618-690b8d08609538ab.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

errMsg:

parameter.filePath should be string instead of array

上传文件

在小程序端可以调用wx.cloud.uploadFile方法进行上传:

wx.cloud.uploadFile({
cloudPath: 'example.png', // 上传到云端的路径
filePath: '', // 小程序临时文件路径
success: res => {
console.log(res.fileID)
},
fail: console.error
})

[外链图片转存失败(img-31YLeaIg-1564706541716)(https://upload-images.jianshu.io/upload_images/11158618-be0b465766cd46ca.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

云存储

上传图片展示

<button bindtap="getFile">文件展示</button>

[外链图片转存失败(img-U11Giozz-1564706541718)(https://upload-images.jianshu.io/upload_images/11158618-6532aaaa0eadba9d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

[外链图片转存失败(img-zXT1AYTb-1564706541719)(https://upload-images.jianshu.io/upload_images/11158618-767759eba28c6fc2.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

文件下载

小程序获取文件fileID到云存储

用户单击下载到小程序

小程序发送文件下载请求到数据库

数据库返回文件信息

小程序存储图片到手机相册

<block wx:for="{{images}}">
<image src="{{item.fileID}}"></image>
<button size="mini" data-fildid="{{item.fileID}}" bindtap="downloadFile">文件下载</button>
</block>

保存图片到相册:

wx.saveImageToPhotoAlbum({
success(res){}
})
downloadFile: function(event){
wx.cloud.downloadFile({
fileID: event.target.dataset.fileid,
success: res=> {
console.log(res.tempFilePath)
wx.saveImageToPhotoAlbum({
filePath: res.tempFilePath
success(res){
wx.showToast({
title: '保存成功'
})
}
}) },
fail: console.error
})
},

若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理。


请点赞!因为你们的赞同/鼓励是我写作的最大动力!

欢迎关注达叔小生的简书!

这是一个有质量,有态度的博客

[外链图片转存失败(img-nKzeQSIL-1564706541720)(https://upload-images.jianshu.io/upload_images/11158618-9ab0d3fef85d80ce?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

微信小程序与云开发的更多相关文章

  1. 微信小程序--使用云开发完成支付闭环

    微信小程序--使用云开发完成支付闭环 1.流程介绍 2. 代码实现和逻辑思想描述 云函数统一下单 对应云函数 unipay [CloudPay.unifiedOrder] 函数思路 : 调用云函数封装 ...

  2. Slog71_选取、上传和显示本地图片GET !(微信小程序之云开发-全栈时代3)

    ArthurSlog SLog-71 Year·1 Guangzhou·China Sep 12th 2018 ArthurSlog Page GitHub NPM Package Page 掘金主页 ...

  3. 微信小程序之云开发一

    最近听说微信小程序发布了云开发,可以不需要购买服务器,就能开发小程序和发布小程序,对于动辄千元的服务器,极大的节约了开发成本,受不住诱惑,我就开始了小程序的云开发,目前项目已上线,亲测不收费,闲不住的 ...

  4. 微信小程序知识云开发

    一个小程序最多5个服务类目,一个月可以修改3次类目 小程序侵权投诉的发起与应对 软件著作权作品登记证书 实现小程序支付功能 如何借助官方支付api简单.高效率地实现小程序支付功能 借助小程序云开发实现 ...

  5. 当微信小程序遇到云开发,再加上一个类似 ColorUI 的模板,人人都能做小程序了

    作为一个 Java 程序员,早就想尝试一把微信小程序,但是一直苦于没有想法,再加上做一个漂亮的页面实在不太擅长. 由于自己比较喜欢历史,经常看历史方面的书.在一次梳理中国现有的朝代时,突然想到,要是可 ...

  6. 微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击

    微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击 摘要: 小程序和公众号最大的区别有如下四点:1.小程序没有粉丝,开发者在后台能看到的只能是累计用户访问数以及实时统计 ...

  7. 微信小程序之蓝牙开发(详细读数据、写数据、附源码)

    本文将详细介绍微信小程序的蓝牙开发流程(附源码)准备:微信只支持低功耗蓝牙也就是蓝牙4.0,普通的蓝牙模块是用不了的,一定要注意. 蓝牙可以连TTL接到电脑上,再用XCOM调试 一开始定义的变量 va ...

  8. 基于微信小程序的系统开发准备工作

    腾讯推出微信小程序也有一段时间了,在各种行业里面也都掀起一阵阵的热潮,很多APP应用被简化为小程序的功能迅速推出,同时也根据小程序的特性推出各种独具匠心的应用,相对传统的APP来说,微信小程序确实能够 ...

  9. [微信小程序直播平台开发]___(一)介绍与流程

    1.一个可以忽略的前言 最近在做的一个项目,客户要做一个直播平台,主播发起视频直播,然后其他人进入房间观看这样子,跟其他直播平台不同的是,主播可以打赏观众,噗. 因为客户要做的是一个民宿的微信小程序, ...

随机推荐

  1. 使用canvas实现360水球波动

    代码如下: <!DOCTYPE html> <html lang="en">  <head>    <meta charset=" ...

  2. 学习docker 部署nginx记录

    docker pull nginx $ docker pull nginx $ docker run --name nginx-test -p 8081:80 -d nginx docker conf ...

  3. Linux 软链接和硬链接简介

    在Linux系统中,将文件分为两个部分:用户数据和元数据. 元数据(inode) 元数据即文件的索引节点(inode),用来记录文件的权限(r.w.x).文件的所有者和属组.文件的大小.文件的状态改变 ...

  4. 【面试突击】- 2019年125条常见的java面试笔试题汇总(一)

    1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部 问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二 ...

  5. webpack-dev-server提示css模块解析失败,但已经装了css-loader

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/a117616/article/detai ...

  6. Gitlab配置webhooks实现自动化部署

    Gitlab 自动化部署 原理介绍 配置gitlab当push动作的时候,访问服务器上的一个链接比如www.shenke.group/hook.php hook.php里面写着一行代码,会让服务器gi ...

  7. Python 软件安装

    安装Python解释器 Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows系统上需要安装一下,超简单 打开官网https://www.p ...

  8. java中的偏序关系

    从半个多月前接到阿里的面试电话,被多线程问题难住,到今天终于读完了<Java Concurrency In Practice>.想总结一下,又发现自己没有能力将一本书的内容都概括下来.还是 ...

  9. JSON.stringify(),JSON.parse(),toJSON()使用方法总结

    今天在看<你不知道的javascript-中>第四章‘强制类型转换’的时候,发现JSON.stringify(),JSON.parse(),toJSON()有很多细节,自己也就总结测试了一 ...

  10. Python +appium baseview

    封装python+appium 的baseview模块 from selenium.webdriver.support.ui import WebDriverWait from time import ...