微信小程序云开发报错
起因是云开发报了个错误:
fail: Error: cloud.callFunction:fail Error: errCode: -501000 | errMsg: [100003] env not exists (f8c78dea-9f77-43cf-9e7f-88c85f2a0795) (callId: 1701747734223-0.895078767368265) (trace: 11:42:14 start->11:42:14 system error (Error: errCode: -501000 | errMsg: [100003] env not exists (f8c78dea-9f77-43cf-9e7f-88c85f2a0795)), abort)
at N (WASubContext.js?t=wechat&s=1701739226681&v=2.25.1:1)
at WASubContext.js?t=wechat&s=1701739226681&v=2.25.1:1
解决办法
不过想了半天,这玩意为啥会报错呢,而且看上去就是云环境不存在,这不奇怪了吗。翻了翻 f8c78dea-9f77-43cf-9e7f-88c85f2a0795 这种东西在云开发里边好像也没有,可能在那个日志收集里边有吧,不过那个要单独收费,还是不尝试了。
分析了半天突然想起来,这个是不是跟当前的云环境使用的是共享环境有关。看了一眼,嗯。。。未配置环境。
赶紧又打开了云开发面板。
我的环境为空,虽然说已经创建共享了,但是我的环境默认还是空的。感觉此处应该有一个神奇的配置。先翻翻文档去吧。
经过来回来去反复跳转之后发现了这么个文档。
里边有一句话 如果是跨账号环境共享的场景(使用其他微信云开发的资源),必须使用 new wx.cloud.Cloud 新建实例使用。
那么好了应该就是这里出的问题了。按照文档上的示例代码。
const a = new wx.cloud.Cloud({
resourceEnv: 'a',
traceUser: true,
})
await a.init()
// 可以调用云开发 API 访问云资源了,如
const res = await a.callFunction({
name: 'test',
data: {
// ...
},
})
仿佛还是不行,有看了看其他的问题,发现她这个里边好像还能有另外一个参数 resourceAppid。
const a = new wx.cloud.Cloud({
resourceEnv: 'a',
resourceAppid: 'wxa', // 主环境的小程序ID
traceUser: true,
})
await a.init()
// 可以调用云开发 API 访问云资源了,如
const res = await a.callFunction({
name: 'test',
data: {
// ...
},
})
这样终于可以了,然后想部署一下试试吧,嗯。。。好像在当前被共享环境的小程序上还推不上去。。。嗯。。。然后,换成主环境小程序成功了。
思考
当前的情况是小程序A的开发环境共享给了小程序B,当小程序B需要使用A的云开发环境的时候,就不能像小程序A那样直接使用了,需要使用新建的环境来调用云函数。
而且现在小程序B也不能直接部署云函数了,都必须要通过小程序A来操作了,这个功能的使用场景还是收紧了。不过对于我们来说充充充能解决的问题都解决不了。还是要尽量可这一个用吧。
不过小程序云开发的这个部署也是真的是有点随意,手残还是很容易导致线上事故的。
翻了翻发现了个版本控制,感觉上线的时候先新建一个版本,然后把流量都放到那个版本上,后续再上线再修改流量使用版本,这样操作比较稳妥。