小程序开发过程中问题一:通过云函数向豆瓣电影列表API接口请求数据的时候很多人会遇到的问题

谨记:每次修改云函数后,都要重新上传并部署!!!

首先,初学者会遇到的问题是显示 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 `)

https://github.com/request/request-promise

但是谨记:每次修改云函数后,都要重新上传并部署!!!

这个也许可以作为返回地址,有可能是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、现在返回的数据只是在小程序的控制台显示出来的。


版权声明:本文为qq_42352666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。