unicloud云函数需右键上传部署、绑定正确服务空间、调用时name与文件夹名严格一致;数据库操作须在控制台配置表权限;h5端需开启本地云函数开关;上传文件cloudpath不能以/开头且须带扩展名。

uniCloud 云函数怎么写、怎么调用才不报错
云函数是 uni-app 做后端逻辑最轻量的入口,但新手常卡在“写了却调不通”——不是部署失败,就是前端 uniCloud.callFunction 报 request:fail net::ERR_CONNECTION_REFUSED 或 function not found。
关键不在代码本身,而在三件事没对齐:环境、部署状态、调用上下文。
- 必须右键云函数目录(如
uniCloud/cloudfunctions/hello)→ “上传部署”,不能只保存文件;HBuilderX 不会自动上传 - 前端调用前要确认当前运行环境已绑定对应服务空间:在 HBuilderX 项目右键 → “uniCloud” → “切换服务空间”,选中你部署函数的那个(比如
my-cloud-env) -
name参数必须和云函数文件夹名完全一致,大小写敏感;hello文件夹 ≠Hello函数 - 云函数默认无跨域限制,但若你在 H5 端调试,且未开启“H5 使用本地云函数”开关(项目配置 → manifest.json → “H5 配置” → 勾选),就会走浏览器 CORS 校验而失败
数据库操作为什么查不到数据,或提示 permission denied
uniCloud 数据库权限不是“默认全开”,而是靠 JSON Schema 控制,哪怕你只是想 get() 一条记录,也得先配好读权限,否则返回空数组或 403 错误。
最容易忽略的是:权限配置不在代码里,而在控制台网页端的数据表结构页。
- 进 uniCloud 控制台 → 进入服务空间 → 左侧“数据库” → 点击表名 → 右上角“表结构” → 切到“权限”标签页
- 刚创建的表默认权限是
"read": false,需手动改为"read": true或更细粒度规则(如"read": {"auth": "user"}) - 前端不能直接
uniCloud.database().collection('users').get()—— 必须在云函数里操作;uni-app 前端 SDK 默认禁止直连数据库(安全策略),只能通过云函数中转 - 字段名别用驼峰,比如
nickName,部分旧版客户端 SDK 会解析失败;推荐下划线nick_name或纯小写
uni-app 前端怎么用腾讯云/阿里云的原生 SDK
官方 @cloudbase/js-sdk 本是为 Web/H5 设计的,直接 npm install 后在 uni-app 里 import 会报 uni.request is not a function —— 因为它内部调用的是 fetch 或 XMLHttpRequest,而 uni-app 的网络请求统一走 uni.request。
解决方案不是改 SDK 源码,而是用适配器补全接口契约。
- 装适配包:
npm install @cloudbase/uni-app-adapter(注意不是官方主包) - 在
main.js初始化时注入:import cloudbase from '@cloudbase/js-sdk'<br>import { adapter } from '@cloudbase/uni-app-adapter'<br>const app = cloudbase.init({ env: 'your-env-id' })<br>app.useAdapter(adapter) - 之后所有
app.database()、app.uploadFile()就能用了,底层自动转成uni.request和uni.uploadFile - ⚠️ 注意:此方式仅适用于 H5 和小程序端;App 端因平台限制,仍建议优先走 uniCloud 云函数封装,避免证书/签名等额外配置
上传文件失败,cloudPath 怎么写才合法
uniCloud.uploadFile 对路径格式极其敏感,写错一个字符就返回 invalid cloudPath 或静默失败。
-
cloudPath必须带扩展名,且不能以/开头,例如:'avatar/abc123.jpg'✅,'/avatar/abc123.jpg'❌,'avatar/abc123'❌ - 路径层级不能超过 5 级,比如
'a/b/c/d/e/f.jpg'就超限(f.jpg是第 6 层) - 文件名不能含中文、空格、特殊符号(如
【测试】.png),建议前端用encodeURIComponent处理原始文件名再拼接 - 临时文件路径
filePath必须来自uni.chooseImage或uni.chooseFile返回的tempFilePath,不能是本地静态资源路径(如static/logo.png)
云开发不是把后端搬上云就完事,它是“约定大于配置”的体系。很多问题不是代码写错了,而是控制台没点、权限没开、路径少了个点——这些地方没 UI 提示,全靠你记得去翻文档角落。











