小程序云开发提供了一套完整的后端云服务,开发者无需自行搭建和维护服务器,就可以使用数据库、存储、计算等能力,你提到的“主机”概念,在云开发中主要通过以下两种方式体现:
1、云函数:无需管理服务器的函数执行环境(Serverless),你可以理解为一个个“小程序”,每个函数处理一个特定的请求。
2、云托管:提供更灵活的容器化部署能力,你可以将用任何语言编写的完整项目(如 Node.js、Java、Python 应用)部署上去,更像一个传统的“虚拟主机”,但同样是免运维的。
下面我分两部分详细说明。
第一部分:云函数(Serverless 函数)的使用
云函数是云开发最核心和常用的功能,非常适合处理业务逻辑、数据库操作、调用第三方API等。
1、 在微信开发者工具中,打开你的小程序项目。
2、 在左侧菜单栏点击“云开发” 按钮。
3、 根据提示开通云开发环境(会要求你设置环境名称和ID),你会得到一个专属的环境,里面包含数据库、存储空间和云函数运行空间。
1、初始化云函数目录:在项目根目录,右键点击cloudfunctions
文件夹,选择“新建 Node.js 云函数”,输入函数名,例如getUserInfo
。
2、编写函数逻辑:开发者工具会自动生成一个index.js
文件和一个package.json
文件。index.js
里有一个默认的main
函数。
// cloudfunctions/getUserInfo/index.js const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV // 自动使用当前云环境 }) // 云函数入口函数 exports.main = async (event, context) => { // event 包含了调用端(小程序)上传的参数 const { userId } = event // 这里可以执行数据库操作、计算、调用其他API等 const db = cloud.database() const userInfo = await db.collection('users').doc(userId).get() // 返回结果给调用端 return { success: true, data: userInfo.data } }
3、上传并部署:右键点击刚刚创建的getUserInfo
云函数目录,选择“上传并部署:云端安装依赖(不上传 node_modules)”,这样你的函数就被部署到云端了。
在你的小程序页面(.js
文件)中,可以轻松调用这个云函数。
// pages/index/index.js Page({ onLoad() { // 调用云函数 wx.cloud.callFunction({ name: 'getUserInfo', // 云函数名称 data: { // 传递给云函数的参数 userId: '123456' }, success: res => { console.log('云函数返回结果:', res.result) // res.result 就是云函数中 return 的内容 {success: true, data: ...} }, fail: err => { console.error('调用失败:', err) } }) } })
免运维无需关心服务器配置、负载均衡、扩容等问题。
按量计费只有函数被调用时才会计费和执行,非常经济。
内置鉴权通过wx-server-sdk
可以天然获取到用户的 openid 等身份信息,安全方便。
第二部分:云托管(Container)的使用
如果你的业务更复杂,需要运行一个持续性的、用任意语言编写的应用(比如一个 Express/Koa Web 框架、或一个 Python Django 项目),那么云托管是更好的选择。
1、 进入微信开发者工具,打开云控制台。
2、 在云开发环境中,找到并开通“云托管” 服务。
假设你有一个 Node.js 的 Express 应用。
1、项目结构:
your-project/ ├── server/ # 你的后端项目目录 │ ├── app.js # Express 应用入口文件 │ ├── package.json │ └── ... ├── container.config.json # 云托管配置文件(必须) └── ...
2、编写app.js
:
const express = require('express')
const app = express()
app.get('/api/user', (req, res) => {
res.json({ name: '小明', age: 18 })
})
// 注意:监听端口必须使用环境变量 PORT,云托管的容器运行时动态分配
const port = process.env.PORT || 80
app.listen(port, () => {
console.log(Server running on port ${port}
)
})
3、创建container.config.json
(核心配置文件):
{ "cloudbase": { "service": "my-express-app", // 你的服务名 "containerPort": 80, // 容器内暴露的端口,与代码中监听端口一致 "dockerfilePath": "./Dockerfile" // Dockerfile 的路径 } }
4、创建Dockerfile
(告诉云托管如何构建你的应用镜像):
# 使用官方 Node.js 运行时作为父镜像 FROM node:16-slim # 设置工作目录 WORKDIR /usr/src/app # 复制 package.json 和 package-lock.json COPY package*.json ./ # 安装依赖 RUN npm install # 将本地代码复制到容器中 COPY . . # 启动服务 CMD [ "node", "app.js" ]
部署通常通过命令行 (cloudbase CLI
) 或 CI/CD 工具完成。
1、安装 Cloudbase CLI:
npm install -g @cloudbase/cli
2、登录:
tcb login
3、部署 (在项目根目录执行):
cloudbase framework deploy
命令行工具会自动根据你的配置文件,将项目打包成 Docker 镜像,并部署到云托管环境中。
4、获取访问域名:部署成功后,云托管会为你分配一个唯一的安全域名,形如https://my-service-xxxxxx.service.tcloudbase.com
,小程序端就可以通过wx.request
请求这个域名下的接口(如https://my-service-xxxxxx.service.tcloudbase.com/api/user
)。
语言无关支持任何可以运行在容器中的语言和框架。
弹性伸缩根据流量自动扩容缩容。
公网/内网访问既可以被小程序调用,也可以被其他外部应用调用。
特性 | 云函数 | 云托管 |
适用场景 | 单一、独立的业务功能 | 完整的、复杂的后端应用 |
开发语言 | 主要 Node.js (官方SDK支持最好) | 任意 (Node.js, Java, Python, Go, PHP...) |
部署单位 | 单个函数文件 | 整个项目/服务 |
运维复杂度 | 极低,完全免运维 | 低,只需关心容器构建,无需管理服务器 |
成本 | 按调用次数和资源使用量计费 | 按容器运行实例的资源和使用时长计费 |
如何选择?
对于大多数小程序场景,从云函数开始就足够了,它简单、快速、成本低。
当你需要运行一个现有的Web框架项目,或者需要更精细的控制和多语言支持时,再选择云托管。
建议你先从云函数入手,熟悉云开发的整个流程和生态,这对于理解小程序后端开发非常有帮助。
文章摘自:https://idc.huochengrm.cn/zj/15866.html
评论