谨记:每次修改云函数后,都要重新上传并部署!!!
首先,初学者会遇到的问题是显示 console.err is not function,为什么,先别问为什么,直接把console.err改成console.error,然后再看问题,通常如我,因为每次修改云函数之后并没有上传并部署,所以再次编译,还是同样的问题,所以没有上传部署,你再怎么改,你的云函数都是运行你上一次上传的云函数,与现在编辑窗体上的代码无关,所以谨记,一旦改了云函数 ,就要上传并部署。
第二,改为console.error后,这个时候显示的警告一般没有,除非我多虑,多写了点,比如:
笔者在云函数的index.js里面把cloud.init()函数改为了如下:(这是在我之前除了改console.err之外不知道改啥的情况下改的这)
wx.cloud.init()
{
env:'-----------------------',
traceUser:true
}
即便这样改了,无济于事,反而会出问题,控制台会说wx is not definde等等,也就是说wx没有定义或者不是函数。但实际上这个函数可以不用改,直接用默认的cloud.init()就好了,所以我们对他还原。
然后,我们对于豆瓣电影列表的API接口,因为豆瓣那边点击量太多(访问次数)的原因,可能有时候会不让访问,但是一般这种情况较少,我列举了几个可以访问的地址(笔者亲测)。
案例1:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
var rp = require('request-promise');
// 云函数入口函数
exports.main = async (event, context) => {
return rp(`http://api.douban.com/v2/movie/in_theaters?apikey=0df993c66c0c636e29ecbb5344252a4a&start=0&count=10 `)
.then(function(res) {
console.log(res);//在调用云函数的时候也看看这个值
return res;
})
.catch(function(err) {
console.error(err);
});
}控制台显示 如下:

案例2:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
var rp = require('request-promise');
// 云函数入口函数
exports.main = async (event, context) => {
return rp(`http://api.douban.com/v2/movie/in_theaters?apikey=0df993c66c0c636e29ecbb5344252a4a&start=${event.start}&count=${event.count}`)
.then(function(res) {
console.log(res);//在调用云函数的时候也看看这个值
return res;
})
.catch(function(err) {
console.error(err);
});
}控制台显示如下:

案例3:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
var rp = require('request-promise');
// 云函数入口函数
exports.main = async (event, context) => {
return rp(`http://api.douban.com/v2/movie/in_theaters?start=${event.start}&count=${event.count}`)
.then(function(res) {
console.log(res);//在调用云函数的时候也看看这个值
return res;
})
.catch(function(err) {
console.error(err);
});
}控制台显示如下:

案例4:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
var rp = require('request-promise');
// 云函数入口函数
exports.main = async (event, context) => {
return rp('https://github.com/request/request-promise?&start=0&count=10')
.then(function(res) {
console.log(res);//在调用云函数的时候也看看这个值
return res;
})
.catch(function(err) {
console.error(err);
});
}控制台显示如下:

所以这四个地址均可以:
return rp(`http://api.douban.com/v2/movie/in_theaters?start=${event.start}&count=${event.count}`)
return rp(`http://api.douban.com/v2/movie/in_theaters?apikey=0df993c66c0c636e29ecbb5344252a4a&start=${event.start}&count=${event.count}`)
return rp(`http://api.douban.com/v2/movie/in_theaters?apikey=0df993c66c0c636e29ecbb5344252a4a&start=0&count=10 `)
但是谨记:每次修改云函数后,都要重新上传并部署!!!
这个也许可以作为返回地址,有可能是null:https://github.com/request/request-promise
下面一些案例:并没有设置start=0,count=10的情况
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
var rp = require('request-promise');
// 云函数入口函数
exports.main = async (event, context) => {
// return rp(`http://api.douban.com/v2/movie/in_theaters?start=${event.start}&count=${event.count}`)
// return rp(`http://api.douban.com/v2/movie/in_theaters?apikey=0df993c66c0c636e29ecbb5344252a4a&start=${event.start}&count=${event.count}`)
// return rp(`http://api.douban.com/v2/movie/in_theaters?apikey=0df993c66c0c636e29ecbb5344252a4a&start=0&count=10 `)
// return rp('https://github.com/request/request-promise?&start=0&count=10')//可以访问
return rp('https://github.com/request/request-promise?&start=${ event.start }& count=${ event.count }')//
// &start=${ event.start }& count=${ event.count } '
.then(function(res) {
console.log(res);//在调用云函数的时候也看看这个值
return res;
})
.catch(function(err) {
console.error(err);
});
}其控制台显示结果如下:

设置了start=0,count=10(但是又因为这是GitHub 里面的,所以 并不像豆瓣API电影列表接口一样)
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
var rp = require('request-promise');
// 云函数入口函数
exports.main = async (event, context) => {
return rp('https://github.com/request/request-promise?&start=0&count=10')//
.then(function(res) {
console.log(res);//在调用云函数的时候也看看这个值
return res;
})
.catch(function(err) {
console.error(err);
});
}其控制台显示结果如下 :

所以总结如下:
对于GitHub里面,因为没有列表,所以两种情况都一样。
而在豆瓣电影列表API中,我们如果不去改变&start以及&count的值,会默认10条一次加载,如果我们设置,比如,&start=0,&count=20结果就不一样了。
几个注意事项(我个人的理解以及经验分享):
1、要随时上传并部署云函数
2、要将所有的console.err()改为console.error()
3、在默认&start=${ event.start }& count=${ event.count }的情况下和&start=0,&count=10结果一样,而&start=0,&count=20不一样。
4、在GitHub这种没有列表的网站是不能表达你想要的结果,所以通常会返回整个HTML文档。
5、在云函数上传并部署的过程中一定要等上传完成后,再编译,否则会出现如超时3s的异常错误。
6、现在返回的数据只是在小程序的控制台显示出来的。