由于微信小程序的云函数的运行环境是 Node.js,所以可以在云函数中利用axios、request等库发送HTTP请求,以解决客户端中只能使用微信的wx.request API发送HTTPS请求的问题。
安装依赖的问题
在官方文档说得不太清楚的指引下,经过多次试验,得到以下结果:
1、每个需要使用第三方库的云函数都要单独安装依赖。
2、选择本地安装(没什么必要)时,首先用命令行在云函数的目录下运行“npm install --save库名”安装依赖,然后选择上传并部署所有文件。
3、选择云端安装依赖时,只需在package文件配置即可,无需使用npm安装依赖(官网文档却说要)。
使用axios库的问题
axios不能直接使用response赋值和打印response,否则会报错“Converting circular structure to JSON”,非要打印response查看时要用util.inspect()将其转为字符串,返回的数据用response.data取出。
const cloud = require('wx-server-sdk')
const axios = require('axios')
const util = require('util');
cloud.init()
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
var responsedata
await axios.get('http://wxapi.shinytengxvnyun.cn/weixinapi/getuser')
.then(function (response) {
// console.log(response);不能直接使用response赋值和打印response
console.log(util.inspect(response));
responsedata = response.data
})
return {
openid: wxContext.OPENID,
responsedata: responsedata
}
}
使用request库的问题
request的异步操作使用await关键字无效(不知道为什么),要用Promise处理。
const request = require('request')
cloud.init()
exports.main = async (event, context) => {
//使用await无效
// await request.get('http://wxapi.shinytengxvnyun.cn/weixinapi/getuser',
// function (error, response, body) {
// console.log(error);
// console.log(response);
// console.log(body);
// });
return new Promise((resolve, reject) => {
let url = 'http://wxapi.shinytengxvnyun.cn/weixinapi/getuser'
request.get(url, function (err, resp, body) {
return resolve(body)
})
})
}
未知本质的原理,先记录一下这几个坑。