从0开始搭建微信小程序前后端的全过程
目录
从0开始搭建微信小程序(前后端)的全过程
一、小程序开发基础
(一)小程序的概念与特点
- 定义与便捷性
- 微信小程序是一种创新的应用形式,它无需像传统应用那样进行繁琐的下载和安装过程。用户只需在微信中轻轻一点,就能立即使用,真正实现了 “触手可及” 的便捷体验。无论是在等公交、排队购物还是闲暇时光,用户都能迅速打开小程序,满足各种需求,如查看新闻资讯、购物、点餐等,用完后直接关闭,不会占用手机过多的存储空间,这种便捷性使得小程序在现代生活中备受青睐。
- 功能特性
- 小程序具备强大的功能,它可以调用微信提供的丰富 API,如获取用户位置信息,从而为用户提供周边服务推荐;利用相机和相册 API,方便用户上传图片或拍摄照片进行分享;通过支付 API,实现在线购物的便捷支付流程等。同时,小程序还支持多种交互方式,如点击、滑动、长按等,为用户带来流畅的操作体验,满足不同场景下的使用需求。
(二)小程序开发前的准备
- 注册小程序账号
- 要开发小程序,首先需要前往微信公众平台( )进行账号注册。注册时,需提供一个未被注册过的邮箱,该邮箱将成为小程序的登录账号。设置密码时,要确保密码由字母、数字或英文符号组成,长度至少为 8 位,并且区分大小写。完成邮箱和密码的填写后,输入验证码,仔细阅读并勾选相关服务协议,然后点击 “注册” 按钮。注册成功后,登录邮箱激活账号,按照系统提示完成后续操作。需要注意的是,一个手机号在验证界面只能注册 5 个小程序。
- 获取开发者工具
- 注册完成后,登录微信公众平台,进入小程序管理页面,在 “开发与服务” - “微信开发工具” 处,点击下载链接。根据自己的操作系统(如 Windows 或 Mac)选择合适的版本进行下载。下载完成后,双击安装文件,按照安装向导的提示进行安装。安装完成后,打开开发者工具,使用微信扫码登录,即可开始小程序的开发工作。
(三)开发者工具的使用
- 界面布局与功能介绍
- 微信开发者工具的界面主要由菜单栏、工具栏、模拟器、编辑器和调试器组成。菜单栏提供了各种操作选项,如项目管理、文件操作、编辑功能、工具调用等。工具栏包含了常用功能的快捷按钮,如编译、预览、真机调试、清缓存、上传等,方便开发者快速执行相应操作。模拟器用于模拟小程序在不同手机型号上的运行效果,开发者可以在模拟器中查看小程序的界面布局、交互效果等,及时发现并调整问题。编辑器是编写代码的主要区域,支持代码的输入、编辑、格式化等操作,提高代码编写效率。调试器则提供了强大的调试功能,如 Console(控制台)用于输出调试信息,Sources(源代码)用于查看和调试代码,Network(网络)用于记录网络请求信息等,帮助开发者快速定位和解决代码中的问题。
- 创建项目与项目结构解析
- 打开开发者工具后,点击 “新建项目”,在弹出的窗口中输入项目名称(如 “myFirstMiniProgram”),选择项目存储路径(建议选择一个空文件夹,以便于管理项目文件),然后输入注册小程序时获得的 AppID(若没有 AppID,可选择 “无 AppID” 进行测试,但部分功能可能会受限)。接着选择开发模式为 “小程序”,后端服务根据需求选择是否使用云开发(若不使用,选择 “不使用云服务”),模板选择可根据个人喜好或项目需求进行选择(如 “js 基础版” 等),最后点击 “创建” 按钮,即可成功创建一个小程序项目。
- 一个小程序项目主要由以下部分组成:
- pages 文件夹 :存放小程序的各个页面文件,每个页面都有自己独立的文件夹,且文件夹名称与页面名称相同。在页面文件夹中,通常包含四个文件,分别是.js(用于编写页面的逻辑代码,处理用户交互、数据请求等操作)、.json(用于配置页面的相关属性,如是否允许下拉刷新、页面标题等)、.wxml(类似于 HTML,用于构建页面的结构,描述页面的布局和元素)、.wxss(类似于 CSS,用于设置页面的样式,美化页面元素)。例如,一个名为 “index” 的页面,其文件结构为 “pages/index/index.js”“pages/index/index.json”“pages/index/index.wxml”“pages/index/index.wxss”。
- utils 文件夹(可选) :用于存放一些工具类文件,如封装的网络请求函数、数据处理函数等。这些工具类文件可以在多个页面中被复用,提高了代码的复用性和开发效率。例如,可以在 “utils” 文件夹中创建一个 “http.js” 文件,用于封装微信小程序的网络请求 API,方便在其他页面中统一调用网络请求。
- app.js 文件 :小程序的入口文件,小程序启动时首先执行该文件。在 app.js 中,可以进行全局数据的定义和初始化,如定义全局变量、注册全局函数等。同时,还可以处理小程序的生命周期函数,如 onLaunch(小程序初始化时触发,常用于进行一些初始化操作,如获取用户信息、检查登录状态等)、onShow(小程序显示时触发,可用于更新页面数据等操作)、onHide(小程序隐藏时触发,如当用户切换到其他应用时)等,通过这些生命周期函数可以更好地管理小程序的运行状态。
- app.json 文件 :小程序的全局配置文件,用于配置小程序的整体属性和页面路由等信息。在 app.json 中,可以设置小程序的页面组成(通过 “pages” 字段指定小程序包含哪些页面,页面路径需按照 “pages / 页面名称 / 页面名称” 的格式填写)、窗口样式(如导航栏背景颜色、标题文字颜色、下拉 loading 样式等,通过 “window” 字段进行配置)、tabBar(若小程序有底部或顶部 tab 栏,可通过 “tabBar” 字段进行详细配置,包括 tab 栏的颜色、选中颜色、背景色、页签列表等)等,通过对 app.json 的合理配置,可以打造出具有统一风格和良好用户体验的小程序。
- app.wxss 文件 :小程序的全局样式文件,用于设置小程序的全局样式。在 app.wxss 中定义的样式规则将作用于整个小程序的所有页面,除非页面自身的 wxss 文件中对相同样式进行了覆盖。例如,可以在 app.wxss 中设置全局的字体大小、颜色、背景颜色等基本样式,保持小程序整体风格的一致性,同时也可以在页面的 wxss 文件中针对个别页面进行特殊样式的设置,实现个性化的页面设计。
- project.config.json 文件 :项目的配置文件,保存了开发者在工具上针对项目所做的各种配置,如项目名称、AppID、开发模式、后端服务等信息。此外,还包括编辑器的相关设置(如颜色主题、代码格式等)、代码上传时的配置(如是否自动压缩)等。当开发者换电脑或重新安装工具时,只要载入同一项目的代码包,开发者工具会自动依据此文件恢复之前的个性化配置,方便开发者在不同环境下继续进行项目开发。
- project.private.config.json 文件(可选) :个人项目配置文件,其中相同设置优先级高于 project.config.json。通常用于保存开发者个人的一些特定配置,如个人偏好的代码编辑设置等。在团队协作开发时,为避免版本管理冲突,一般将 project.private.config.json 写入.gitignore 文件中,不进行版本控制,确保团队开发过程的顺利进行。
- sitemap.json 文件(可选) :站点地图文件,用于告诉微信哪些页面可以被收录,以提高小程序在微信搜索中的曝光率。通过配置 “rules” 数组中的 “action”(是否允许被搜索,取值为 “allow” 或 “disallow”)和 “page”(允许 / 不允许被搜索的页面路径或通配符)属性,可以控制小程序页面的搜索可见性。例如,{“rules”:[{“action”:“allow”,“page”:"*"}]} 表示所有页面都允许被微信索引(默认情况);{“rules”:[{“action”:“disallow”,“page”:“path/to/page”}]} 则配置指定页面不被索引,其余页面允许被索引。如果没有 sitemap.json 文件,默认所有页面都能被索引,且该文件中默认的设置优先级最低。
(四)小程序的基本语法
- 模板语法
- 小程序的模板语法与 HTML 有一定的相似性,但也有其独特之处。
- 文本插值 :使用双大括号 “{ {}}” 进行文本插值,可以在其中嵌入变量或简单的表达式。例如,在页面的.js 文件中定义了一个变量 “message”,在.wxml 文件中可以使用 “{ {message}}” 来显示该变量的值。同时,也可以在双大括号内进行简单的计算,如 “{ {2 + 3}}” 会显示结果 “5”。这种文本插值方式方便将数据动态展示在页面上,实现数据与视图的绑定。
- 条件渲染 :通过 “wx:if”“wx:elif”“wx:else” 指令实现条件渲染。例如,“wx:if="{ {condition}}"”,当 “condition” 为真时,渲染对应的元素;当 “condition” 为假时,可以结合 “wx:elif” 和 “wx:else” 来指定其他条件和对应的渲染内容。这使得页面可以根据不同的条件展示不同的内容,增强了页面的交互性和灵活性。
- 列表渲染 :使用 “wx:for” 指令可以遍历数组或对象,生成重复的页面元素。例如,“wx:for="{ {list}}" wx:key=“index”",其中 “list” 是要遍历的数组,“wx:key” 用于指定一个唯一的键值,提高渲染效率。在循环体内,可以通过 “{ {item}}” 访问数组中的每一项,通过 “{ {index}}” 获取当前项的索引。此外,还可以使用自定义的变量名来代替默认的 “item” 和 “index”,如 “wx:for="{ {list}}" wx:for-item=“myitem” wx:for-index=“myidx”",然后在循环体内使用 “{ {myidx}}” 和 “{ {myitem}}” 来访问相关数据。
- 样式语法
- 小程序的样式使用 WXSS(WeiXin Style Sheet),它与 CSS 有很多相似之处,但也有一些扩展和差异。
- 尺寸单位 rpx :小程序中默认的尺寸单位是 rpx,它是一种宽度自适应单位。无论手机型号如何,小程序规定屏幕宽都为 750rpx。例如,在设计稿上量取的宽度为 375px 的元素,在小程序中应设置为 375rpx,这样可以确保元素在不同屏幕宽度的手机上保持相对合适的显示效果,实现自适应布局。开发者在开发过程中,建议以 iPhone6 的设计稿(750px)为标准,量取的像素值直接作为 rpx 的数值,无需进行复杂的换算,提高开发效率。
- 样式规则与选择器 :WXSS 支持大部分 CSS 选择器,但也有一些限制和特殊情况。开发者可以使用类选择器(.class)、ID 选择器(#id)、元素选择器(element)等定义样式规则,设置页面元素的颜色、字体、大小、边距、背景等样式属性。例如,“.container { display: flex; flex-direction: column; align-items: center;}” 可以将类名为 “container” 的元素设置为弹性布局,垂直方向排列,水平居中对齐。同时,WXSS 还支持样式的继承、组合等特性,方便开发者进行样式的管理和优化。
(五)小程序的组件与 API
- 常用组件介绍
- 小程序提供了丰富的内置组件,方便开发者快速构建页面。
- 视图容器组件(view)
:相当于 HTML 中的 “”,是一个块级元素,用于布局和分组页面内容。可以通过设置样式属性(如 “display”“flex-direction”“justify-content”“align-items” 等)来实现灵活的页面布局,如将多个元素水平或垂直排列、居中对齐等。例如,“
”,通过为 “container” 类设置合适的样式,可以实现内容 1 和内容 2 的排列方式和对齐方式。内容 1 内容 2 - 文本组件(text) :类似于 HTML 中的 “”,是行内元素,用于显示文本内容。可以设置文本的颜色、字体大小、字体样式等属性,还可以通过 “user-select” 属性控制文本是否可选,“space” 属性控制文本中的空格显示方式。例如,“
这是一段文本 ”,用户可以选择该文本,并且空格会按照中文字符宽度的一半显示。- 按钮组件(button) :用于创建按钮,触发点击事件。可以设置按钮的类型(如 “primary”“default”“warn” 等,不同类型有不同的样式)、大小、是否禁用等属性,同时通过 “bindtap” 绑定点击事件处理函数。例如,“”,当用户点击该按钮时,会触发 “handleButtonClick” 函数执行相应的逻辑。
- 输入框组件(input) :的文本信息。可以设置输入框的类型(如 “text”“number”“password” 等)、占位符(“placeholder” 属性)、是否只读(“readonly” 属性)等,通过 “bindinput” 和 “bindconfirm” 等事件处理用户输入操作,如实时更新数据和处理输入完成后的操作。例如,“”,用户在输入框中输入内容时,“handleInput” 函数会被触发。
- API 的使用
- 小程序提供了丰富的 API,使开发者能够实现各种功能。
- 网络请求 API(wx.request) :用于向服务器发送网络请求,获取数据或提交数据。例如,“wx.request ({url: ' ‘, method: ‘GET’, success (res) {console.log (res.data)}, fail (err) {console.log (err)}})”,向指定的 URL 发送一个 GET 请求,当请求成功时,在控制台输出响应数据(通过 “res.data” 获取),请求失败时输出错误信息(通过 “err” 获取)。可以通过设置 “url”(请求的 URL)、“method”(请求方法,如 “GET”“POST”“PUT”“DELETE” 等)、“data”(请求参数,用于 POST 等请求提交数据)、“header”(请求头,可设置如 “Content-Type”“Authorization” 等信息)等参数来定制网络请求,实现与服务器的数据交互,满足各种业务需求,如获取商品列表、提交订单信息、登录验证等。
- 本地存储 API(wx.setStorageSync 和 wx.getStorageSync) :“wx.setStorageSync (key, value)” 用于将数据存储到本地缓存中,其中 “key” 是存储数据的键名,“value” 是要存储的数据(可以是字符串、对象、数组等)。例如,“wx.setStorageSync (‘userInfo’, {name: ’ 张三 ‘, age: 20})” 将一个包含用户姓名和年龄的对象存储到本地缓存中,键名为 “userInfo”。“wx.getStorageSync (key)” 则用于从本地缓存中获取数据,根据指定的键名返回相应的数据。例如,“let userInfo = wx.getStorageSync (‘userInfo’)” 可以获取之前存储的用户信息对象,方便在不同页面或下次打开小程序时使用。
- 界面交互 API(如 wx.showToast、wx.showModal 等) :“wx.showToast ({title: ’ 操作成功 ‘, icon:‘success’})” 会在页面上显示一个带有 “成功” 图标的提示框,告知用户操作成功。可以通过设置 “title”(提示文字)、“icon”(提示图标,可选值有 “success”“loading”“none” 等)、“duration”(提示显示的时长,单位为毫秒)等参数来定制提示框的样式和显示时间。“wx.showModal ({title: ’ 提示 ‘, content: ’ 确定要执行此操作吗?’, success (res) {if (res.confirm) {console.log (’ 用户点击确定 ‘)}}})” 则会弹出一个模态对话框,显示提示信息并等待用户点击确定或取消按钮,根据用户的选择执行相应的逻辑。这些界面交互 API 可以增强小程序与用户之间的交互效果,提升用户体验。
比文云官网,专为企业提供小程序、网站、系统搭建服务,无论是模板搭建还是代码定制,通通都能满足,找服务来比文云官网。
(二)服务器搭建与配置
(三)后端程序开发与数据获取
(四)后端程序部署
(五)小程序与后端的交互
三、项目实践与总结
(一)项目实践过程中的问题与解决
二、后端开发与服务器配置
(一)后端开发概述
后端的作用与重要性
- 后端在小程序开发中起着至关重要的作用,它负责处理业务逻辑、管理数据存储和提供数据接口。例如,当用户在小程序中进行登录操作时,后端需要验证用户输入的账号和密码是否正确;当用户查询商品信息时,后端要从数据库中获取相应的数据并返回给前端。后端的稳定运行和高效性能直接影响着小程序的整体功能和用户体验。
开发语言与框架选择
- 本文使用 Java 语言和 Spring Boot 框架进行后端开发。Java 是一种广泛应用的编程语言,具有强大的功能和丰富的类库,适合开发大型企业级应用。Spring Boot 是一个基于 Spring 框架的快速开发框架,它简化了项目的初始搭建和配置过程,提供了约定大于配置的开发方式,使开发者能够更加专注于业务逻辑的实现。同时,Spring Boot 还集成了许多常用的组件和工具,如数据库连接池、Web 开发框架等,提高了开发效率和项目的可维护性。
云服务器的选择与购买
- 为了确保后端程序能够 24 小时稳定运行并对外提供服务,需要购买云服务器。云服务器具有高可用性、可扩展性和安全性等优点。本文选择腾讯云服务器,在购买时,根据项目的实际需求和预算选择合适的配置。例如,对于一个小型的小程序项目,选择了较低配置的服务器:CPU 为 1 核、内存为 1GB、公网带宽为 1Mbps、操作系统为 CentOS 7.5 64 位、系统盘为高性能云硬盘共 50GB、数据盘为高性能云硬盘共 50GB。在选择配置时,需要考虑到小程序的预计访问量、数据存储需求等因素,避免资源浪费或性能不足的情况。
域名注册与解析
- 域名是用户访问服务器的友好名称,便于记忆和传播。在任意域名服务商(如腾讯云)购买域名后,需要进行域名解析,将域名与服务器的公网 IP 地址建立对应关系。在腾讯云后台的云解析中,点击域名添加记录,一般主要添加 A 记录,即将域名绑定到 IPv4 地址上。可以添加多条记录,以主机记录区分各级域名,“@” 表示直接使用二级域名 ,其他的则表示使用三级或更多级域名。例如,将 “ ” 解析到服务器的公网 IP 地址,用户就可以通过该域名访问服务器上的小程序后端服务。
域名备案流程
- 根据我国互联网管理规定,域名需要进行备案才能正常使用。进入备案页面(如腾讯云的备案管理页面)开始备案,整个过程包括办理幕布拍照(用于网站负责人真实性核验)、验证备案信息(确保信息准确无误)、填写主体信息(如主办单位名称、证件类型、证件号码等)、填写网站信息(如网站名称、网站域名、网站服务内容等)、上传材料(如主办单位证件、网站负责人证件、核验单等)、确认备案信息并提交初审。备案过程需要一定时间,通常需要十几二十天,期间需要按照要求提供准确的信息和材料,确保备案顺利通过。
SSL 证书的购买与配置
- 为了保证数据传输的安全性,需要购买 SSL 证书并配置在服务器上,使小程序能够以 https 协议进行访问。可以选择免费的 SSL 证书(虽然加密功能相对较弱,但对于一些小型项目也能满足基本需求)或付费的 SSL 证书(提供更强的加密功能和安全保障)。在购买 SSL 证书后,将证书下载下来,然后按照相关文档(如 Tomcat 证书部署文档或官网文档)的指导,将证书配置在 Tomcat 服务器中,确保服务器能够正确使用 SSL 证书进行加密通信。
开发环境搭建
- 后端开发需要搭建相应的开发环境,包括安装 Java 8 开发集成环境(如 IntelliJ IDEA Ultimate 2017)、Maven 构建工具等。安装 Java 8 时,从官方网站下载 Java SE Runtime Environment 8u201 并按照安装向导进行安装。安装 IntelliJ IDEA 时,根据操作系统选择合适的版本下载并安装,安装完成后进行必要的配置,如设置字体、主题、快捷键等,以提高开发效率。Maven 用于项目的构建和依赖管理,下载安装后,在项目的 pom.xml 文件中配置项目的依赖项,Maven 会自动下载所需的库文件,确保项目能够正常编译和运行。
数据来源与获取方式
- 为了给小程序提供排行榜数据,需要从可靠的数据来源获取数据。本文使用了豆瓣的公共 API 获取部分数据,如通过 “ ” 这个 URL 可以批量分页获取豆瓣 top250 电影的数据。对于其他排行榜网站的数据,由于没有现成的 API,使用 Python 编写爬虫程序定期爬取。在 Python 爬虫中,使用 urlopen 和 urllib.request.urlopen () 函数访问目标 URL,获取网页数据,然后使用 BeautifulSoup 对网页数据进行解析,通过遍历搜索文档树找到需要的数据。获取到的数据可以用于更新本地的静态数据,以便 Java 程序能够获取相对新的数据。虽然这种方式在服务重启时可能存在一段时间数据不是最新的问题,但在项目初期可以快速实现功能,后续可以进一步优化数据存储方式,如使用数据库来存储爬取的数据,提高数据的实时性和稳定性。
后端接口开发与实现
- 使用 Spring Boot 框架开发后端接口,通过创建控制器类(如 MovieListController)并使用 @RestController 和 @RequestMapping 注解来定义接口。@RestController 注解表明此类处理 http 请求,并将方法的返回值转换为 JSON 格式返回给前端。@RequestMapping 注解用于映射 URL,例如 “@RequestMapping (value = “/movie/top250”)” 定义了一个获取豆瓣 top250 电影信息的接口。在接口方法中,通过获取请求参数(如 “start” 和 “limit”),调用相应的数据获取逻辑(如从豆瓣 API 获取数据或从本地数据中获取数据),对数据进行处理和转换(如将获取到的数据转换为适合前端使用的格式),最后将处理后的数据返回给前端。通过这种方式,实现了后端接口与前端小程序的通信,为小程序提供数据支持,实现各种功能,如展示排行榜数据、查询详情数据等。
环境准备与安装
- 在云服务器上部署后端程序前,需要先安装好环境,包括 JRE(Java 运行时环境)和 Tomcat(Web 应用服务器)。安装 JRE 时,从官方网站下载 Java SE Runtime Environment 8u201 并在服务器上进行安装。安装 Tomcat 时,进入 Tomcat 官网下载对应版本的压缩包,将其拷贝至指定目录(如 /usr/local)并解压。安装完成后,需要配置 Tomcat 的环境变量,参考 Apache Tomcat User Guide 进行配置,确保 Tomcat 能够正常运行。
SSL 证书配置到 Tomcat
- 将购买并下载好的 SSL 证书配置到 Tomcat 中,具体配置过程参考 Tomcat 证书部署文档或官网文档 SSL/TLS Configuration HOW - TO。一般需要将证书文件放置在 Tomcat 的指定目录下,并在 Tomcat 的配置文件(如 server.xml)中进行相应的配置,指定证书的路径、密码等信息,使 Tomcat 能够启用 SSL 协议,实现安全的 https 通信。
部署应用到 Tomcat
- 使用 Maven 构建项目并将代码打包成 war 包形式的文件(在 target 目录中可以找到该 war 包)。将 war 包拷贝到 Tomcat 的 webapps 目录下,如 “/usr/local/tomcat8/webapps”。然后进入 Tomcat 的 bin 文件夹,运行 startup.bat(在 Windows 系统中)或 startup.sh(在 Linux 系统中)启动 Tomcat,Tomcat 会自动解压 war 包并进行部署。部署完成后,后端接口就可以通过域名和相应的 URL 访问到了,小程序前端就可以与后端进行数据交互,实现完整的功能。
前端请求后端接口
- 在小程序前端开发中,通过 wx.request 等 API 向后端接口发送请求,获取数据或提交数据。例如,当小程序需要获取排行榜数据时,在前端代码中使用 wx.request 发送一个 GET 请求到后端的相应接口(如 “ ”),并在请求成功的回调函数中处理返回的数据,将数据展示在小程序页面上。在发送请求时,需要注意设置正确的请求方法(GET、POST 等)、请求头(如 Content-Type)和请求参数(根据后端接口的要求),确保请求能够正确到达后端并获取到预期的数据。
后端接口响应数据
- 后端接口接收到前端的请求后,根据请求的参数和业务逻辑进行数据处理,然后将处理后的数据以 JSON 格式返回给前端。例如,在 MovieListController 中的接口方法,获取到前端请求的参数后,从相应的数据来源(如豆瓣 API 或本地数据)获取数据,进行必要的转换和处理,最后将数据封装成 JSON 格式(如使用 CommonRespVo 类将数据和状态码等信息封装成 JSON 对象)返回给前端。前端接收到后端返回的数据后,根据数据的结构和业务需求进行页面渲染和交互处理,实现小程序的各种功能,如展示排行榜列表、显示详情信息等。
开发过程中的常见问题
- 在小程序和后端开发过程中,可能会遇到各种问题。例如,在前端开发中,可能会遇到样式不兼容不同手机型号的问题
- 文本组件(text) :类似于 HTML 中的 “”,是行内元素,用于显示文本内容。可以设置文本的颜色、字体大小、字体样式等属性,还可以通过 “user-select” 属性控制文本是否可选,“space” 属性控制文本中的空格显示方式。例如,“