在实际开发中,建议每一个正式环境都搭配一个测试环境,所有功能先在测试环境测试完毕后再上到正式环境
app.js
=============
wx.cloud.init({
env: "test-892d04",
traceUser:true,
})
传入字符串形式的环境 ID ,
云函数添加数据
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
return await db.collection('user').add({
data:{
user: event.name,
password: event.age,
regtime: db.serverDate()
}
})
}
const db = cloud.database() 获取默认环境的数据库,
现在的问题是 我想给test-892d04环境 下的user集合添加数据,结果会写入正式环境的user集合里!
我然后重新指定了环境,实现想要的效果
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database({
env: 'test-892d04'
})
我想问测试环境的云函数如需要上传到正式环境里,那么每个云函数里的 cloud.database() 都要重新定义成正式环境的id
误区:
我一开始以为app.js 里的wx.cloud.init 定义好后,云函数的cloud.init()就自动关联上了. 事实上操作测试环境的云函数,数据却写在正式环境里,
,那是不是app.js 里的wx.cloud.init 与 cloud.init() 根本就没关系,我这边的情况就是这样,确实不太明白wx.cloud.init 中定义的全局配置的意义
何在,?小白一个请帮忙解答一下,谢谢
自己也尝试搜索社区类似的问题,
都是书面回答,迷迷糊糊的 如: api 层面指定环境的(谁知道api层面具体指那?)
还有一个关系wx.cloud.init 传入对象写法分别指定各个服务的默认环境,之前的字符串写法没问题可以,写入数据
wx.cloud.init({
env: { database: "test-892d04"},
traceUser: true
})
database | string | 否 | default | 数据库 API 默认环境配置 |
最后报错了:
Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -504001, error message Unkown function; at cloud.callFunction
其实最想解决的是:
1测试环境的云函数如需要上传到正式环境里,是不是每个云函数里的 cloud.database() 都要重新定义成正式环境的id,这样真的不科学!
2 wx.cloud.init 全局定义与云函数到底是什么关系?
我也遇到了这个问题,有没有什么方法可以获取到当前云函数是什么环境么?然后再动态的设置数据库的环境。
我从小程序里面把env传到云函数里面了,这样就可以了。
// 调用云函数
wx.cloud.callFunction({
name: 'login',
data: { env: "dev-423fb1"},
// 云函数入口文件
const cloud = require('wx-server-sdk')
// 云函数入口函数
exports.main = async(event, context) => {
cloud.init({
env: event.env
})
看了这么多,貌似也就你这个比较靠谱
这个 env 对于小程序端是全局的
对于云函数 不管使用测试环境还是正常环境默认都是第一个
除非你指定
每个云函数都要指定
不然比正式环境的云函数可能使用了 测试环境的 集合 哈哈哈哈
巨坑,既然不同环境之间默认可以相互访问,不知道环境有什么用
我的wx.cloud为空,请问有人遇到过么
照我的写不就完了
我自己解决了,你没看明白我的问题
呵呵,确实没看明白
我也遇到了这个问题,app.js里指定的环境只能切换云函数的环境,没法切换数据库,按官方文档说的每个环境都是相互独立,不明白为什么会这样
谢谢!