前言
小程序中唯一能發送網絡請求接口數據的是wx.request接口,當然這個接口存在諸多的限制,例如:10個并發請求限制,https限制(當然在開發階段是可以關閉此限制),除了wx.request還有其他方法可以實現類型的功能嗎?當然是有的,這個思路也源于我之前看到的一篇文章,隨便筆記下來
思路
使用云開發來發送網絡請求并把數據返回給小程序端。還不了解的云開發的同學請速度移步到官方【云開發】
新建一個http的云函數
// 云函數入口文件const cloud = require('wx-server-sdk')const axios = require('axios')cloud.init()// 云函數入口函數exports.main = async (event, context) => { const wxContext = cloud.getWXContext() const { method, url, data } = event; const res = await axios.request({ method: method, url: url, data: data }); return { code: 1, data: res.data } || {code: -1, msg: 'error', data: null}}
小程序端二次封裝云函數調用
async http(options = {}) { return wx.cloud.callFunction({ name: 'http', data: { method: options.method || 'GET', url: options.url || '', data: options.data || {} } }).then(res => { return res.result })},
小程序端使用
async onLoad() { this.http({ method: 'GET', url: 'https://www.baidu.com' }).then(res => { console.log(res) }) },
總結
這種方法可以很好繞過https的限制,當然這只是提供一個簡單的思路,我們可以進一步細一點封裝,包括配置header proxy 等等功能,其實原理就是借助云函數做了二次轉發,性能上肯定比不上原生的request
注意
async 和 await 語法糖在最新的開發工具中已經實現了,開啟增強編譯即可使用,具體更新內容請移步官方社區 微信小程序社區
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答