uniCloud新建云对象上传部署报错:Trying to get property 'id' of non-object

uniCloud新建云对象上传部署报错:Trying to get property 'id' of non-object

  1. 小说前端 🧩
  2. 2024-12-27 19:00
  3. 5 min read

使用uni-app开发App时,官方提供的用户/支付体系的便捷插件越来越离不开sass服务uniCloud的结合。比如像uni-id-pages是接入可以满足你大部分使用的用户注册及登录服务。

这时候,如果还想和自有的服务端做一些业务交互,就需要加一些自定义逻辑,但是为了避免在更新官方模块插件时被覆盖掉,我们就需要把自定义逻辑拆分成独立的云函数/云对象上传部署。

云对象的基础文件结构包含index.obj.jspackage.json,根据官方指引创建完后,再参照公共云对象uni-pay-co丰富完善下,此时的package.json大致内容如下:

{
  "name": "we-server",
  "dependencies": {
    "uni-id-common": "file:../../../uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common"
  },
  "extensions": {},
  "cloudfunction-config": {
    "concurrency": 1,
    "memorySize": 512,
    "path": "\/we-server",
    "timeout": 60,
    "triggers": [],
    "runtime": "Nodejs18"
  },
  "origin-plugin-dev-name": "we-server",
  "origin-plugin-version": "0.0.1",
  "plugin-dev-name": "we-server",
  "plugin-version": "0.0.1"
}

package.json的解读

name

name最简单,就是函数/云对象名称,因为云对象也是云函数,除非特殊说明我们下面就使用云函数来代称。我们在客户端需要用name来调用这个云函数。

const weServer = uniCloud.importObject('we-server')

dependencies

dependencies就是云函数依赖的公共模块,比如我需要用到uni-iduid/token信息,我就在这里写入了依赖uni-id-common

extensions

extensions是云函数依赖的扩展库,比如我需要用到短信服务或者一键登录,就需要在这里写入依赖。

cloudfunction-config

cloudfunction-config是云函数的配置信息,就是期望云函数在怎样的服务器环境下运行。其中的path就是把云函数URL化的路由,便于外部服务以API形式调用云函数。triggers则是定时任务设置的定时触发器。

其他

origin-plugin-dev-nameorigin-plugin-versionplugin-dev-nameplugin-version这几项是干嘛的,还真不知道,只看是插件名称/版本号之类的,先放着吧。

uniapp-unicloud-cloudobject

问题出现

噌噌噌的,废了九牛二虎之力终于把逻辑写完了,本地云函数运行两边,很完美的经过多次调试后和服务端交互成功。那咱就把云函数上传部署了吧,毕竟大周五的。

问题就出现了。。。

上传失败:Trying to get property 'id' of non-object

we-server这个名字不允许使用么? 不是,复制改名后错误依然不变。

是代码逻辑有问题么? 也不是,毕竟本地运行很成功。

怎么办?新建一个空白云函数,把怀疑报错的逻辑一块块搬运过去后尝试上传部署,看看是哪块的问题。

运气不错,package.json平移过去之后就报错了,移除【解读】中【其他】的那4个参数,就可以成功上传部署了。正确的内容如下:

{
  "name": "we-server",
  "dependencies": {
    "uni-id-common": "file:../../../uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common"
  },
  "extensions": {},
  "cloudfunction-config": {
    "concurrency": 1,
    "memorySize": 512,
    "path": "\/we-server",
    "timeout": 60,
    "triggers": [],
    "runtime": "Nodejs18"
  }
}

由于origin-plugin-dev-nameorigin-plugin-versionplugin-dev-nameplugin-version这几个参数也没在官方文档中搜索到(也可能是我漏掉了),结合uni-pay猜测下,这几项应该是云函数和uni_modules依赖的关联映射。但是我自定义云函数没有这部分依赖,所以就报错了。

写在最后

在写一些不太熟悉的东西时,还是不要尝试没弄懂的属性。

uniapp uniCloud 云对象 前端