由于作者在上学期间帮老师做微信小程序,但是因为自己的域名没有备案,同时又是因为在五一假期,政府部门不上班的情况下,需要在假期之后就用到,因此便到处寻找解决方案,最后在微信文档中云服务的部分找到了答案。
注册并打开微信云托管
首先先新建MySQL数据库并将名称用户名和密码设置为后端接口中对应的部分。
然后新建服务写好名称后打开
在这里我们选择好自己对应的部分,在这里作者选择手动上传代码包,在这里上传代码包时一定要做好dockerfile的文件,否则可能会一直出现上传服务失败的情况。
当然在这里如果你没有Dockerfile文件的话也可以填无然后选择语言与进程启动命令,如果时nodejs那么一般是node xxx.js这个是你自己需要知道的。
如果你不会写Dockerfile的文件的话也可以查看作者的另一篇文章如何写dockerfile文件-CSDN博客。
发布成功后便会出现以下页面。
修改前端代码
接下来便是修改前端代码,由于微信小程序同样是微信服务器的,一般情况下可以视为同一台服务器,可以理解为本地调试不需要域名访问,同样也不需要https和备案要求了。
上面是官方文档,在这里我会举一些例子,比如nodejs
首先在app.vue中的js部分加上如下代码,或者直接就是app.js里加
<script>
export default {
onLaunch: function() {
console.log('App Launch')
// 初始化云开发
wx.cloud.init({
env: 'xxx', // 云环境ID
});
// 初始化云托管调用
this.initCloudContainer();
// 测试云托管接口调用
this.testCloudCall();
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
methods: {
async initCloudContainer() {
const cloud = new wx.cloud.Cloud({
resourceAppid: 'xxx', // 云托管环境所属账号的appid
resourceEnv: 'xxx', // 云环境ID
});
this.cloud = cloud;
await this.cloud.init();
},
/**
* 封装的微信云托管调用方法
* @param {Object} obj 业务请求信息
* @param {number} number 请求等待次数,默认0
*/
async call(obj, number = 0) {
if (!this.cloud) {
await this.initCloudContainer();
}
try {
const result = await this.cloud.callContainer({
config: {
env: 'xxx'
},
path: obj.path,
method: obj.method || 'GET',
data: obj.data,
header: {
'X-WX-SERVICE': 'xxx', // 服务名称
...obj.header
}
});
console.log(`微信云托管调用结果${result.errMsg} | callid:${result.callID}`);
return result.data;
} catch (e) {
const error = e.toString();
// 如果错误信息为未初始化,则等待300ms再次尝试
if (error.indexOf("Cloud API isn't enabled") != -1 && number < 3) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(this.call(obj, number + 1));
}, 300);
});
} else {
throw new Error(`微信云托管调用失败${error}`);
}
}
}
}
}
</script>
随后在前端页面中的js里调用后端接口的时候将原本的request部分修改为下面的样式。
const response = await getApp().call({
path: 'xxx',服务的路径,在这里对应后端接口中的路径。
method: 'POST',
data: {
}
})
然后便可以在前端代码中调用托管在微信云托管的服务中的后端接口了,同时在微信小程序中也不需要担心https和域名没备案的问题了