困惑 环境指定!
发布于 6 年前 作者 linxiuying 4724 次浏览 来自 问答

在实际开发中,建议每一个正式环境都搭配一个测试环境,所有功能先在测试环境测试完毕后再上到正式环境

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

})

 

databasestringdefault数据库 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 全局定义与云函数到底是什么关系?


 

6 回复

我也遇到了这个问题,有没有什么方法可以获取到当前云函数是什么环境么?然后再动态的设置数据库的环境。

我从小程序里面把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  对于小程序端是全局的  

对于云函数    不管使用测试环境还是正常环境默认都是第一个  

除非你指定

每个云函数都要指定  

不然比正式环境的云函数可能使用了  测试环境的   集合  哈哈哈哈

我也遇到了这个问题,app.js里指定的环境只能切换云函数的环境,没法切换数据库,按官方文档说的每个环境都是相互独立,不明白为什么会这样

巨坑,既然不同环境之间默认可以相互访问,不知道环境有什么用

 我的wx.cloud为空,请问有人遇到过么

回到顶部