云函数调用request请求

云函数调用request请求

问题

上一篇微信小程序定时订阅消息问题文章里,选择了在本地使用setInterval()方法定时更新天气信息,但是要求用户打开小程序才能定时更新天气。做不到在发送消息之前查询当前的天气情况。所以出于这个问题,我选择了以下解决办法。

解决

在云函数里定义一个定时查询天气的函数,用户的位置信息提前存储在数据库里,查询天气时直接从数据库里查询位置信息(因为每次获取用户位置会要求用户授权,比较影响体验,所有就把上传用户授权位置信息提前存储在数据库)。

这里使用到了如何在云函数里调用request请求,微信开发官网文档没有找到关于这个的讲解。所以在这里简单记录一下,希望能对大家开发用帮助。下面的代码为在云函数里调用request请求例子

GET请求例子

// 云函数入口文件
const cloud = require('wx-server-sdk')
// 调用云函数的request
var request = require('request')
// 使用当前云环境
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
// 云函数入口函数
exports.main = async (event, context) => {
    
  return new Promise((resolve, reject) => {
    //调用request
    request({
      url: '',        //请求地址
      headers: {      //请求头
        "content-type": "application/json",
        "Authorization": ""
      },
      method: "GET",   //GET或POST请求
      json: true,      //返回的body结果为json格式,默认是false,如果你要解析返回的数据,选择ture
    }, function (error, response, body) {
      console.info("HTTP - GET")
      console.info(body)
      if (response.statusCode === 200 && !error) {
        //发送请求成功,写你自己的逻辑
      }
    })
  })
}

POST请求例子

// 云函数入口文件
const cloud = require('wx-server-sdk')
// 调用云函数的request
var request = require('request')
// 使用当前云环境
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
// 云函数入口函数
exports.main = async (event, context) => {
    
  return new Promise((resolve, reject) => {
    //调用request
    request({
      url: '',        //请求地址
      headers: {      //请求头
        "content-type": "application/json",
        "Authorization": ""
      },
      method: "POST",   //GET或POST请求
      json: true,      //返回的body结果为json格式
      body: "",        //POST请求,要加上请求体
    }, function (error, response, body) {
        console.info("HTTP - POST")
        console.info(body)
        if (response.statusCode === 200 && !error) {
            //发送请求成功,写你自己的逻辑
        }
     })
  })
}

定时查询天气代码

index.js文件

// 云函数入口文件
const cloud = require('wx-server-sdk')
// 调用云函数的request
var request = require('request')


cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

const db = cloud.database()
const tableName = 'userInfo'

// 云函数入口函数
exports.main = async (event, context) => {
    try {
        // 从云开发数据库中查询等待更新天气的用户列表
        const weather = await db
            .collection(tableName)
            .get()
        console.log("location:", weather.data);

        for (const msgData of weather.data) {
            
            return new Promise((resolve, reject) => {
                var location = msgData.location
                console.log("location:", location)
                //调用天气API查询天气
                request({
                    url: 'https://jisutqybmf.market.alicloudapi.com/weather/query'+ "?location="+ location,
                    headers: {
                        "Authorization": "APPCODE 你自己的APPCODE"
                    },
                    method: "GET",
                    json: true,  
                },function (error,response,body) {
                        console.info("HTTP - GET")
                        console.info(body)
                        if (response.statusCode === 200 && !error && body.status == 0) {
                            var result = body.result;
                            console.info(result)
                            var weatherMessage = "当前天气" + result.weather + "气温" + result.temp + "℃" + "详情点击查看"
                            console.info("天气为:", weatherMessage)
                            //将天气信息添加数据库
                            db.collection(tableName)
                                .where({
                                    openid: msgData.openid
                                })
                                .update({
                                    data: {
                                        weatherMessage: weatherMessage,
                                    }
                                })
                                .then((res) => {
                                    console.log("定时添加天气信息到数据库成功", res);
                                    resolve(body)
                                })
                                .catch((res) => {
                                    console.log("定时添加天气信息到数据库失败", res);
                                    reject()
                                });
                        }
                    }
                )
            })

        }
    }
    catch (e) {
        console.log(e)
        return e
    }
}

config.json文件里边定义触发器(具体用法参考我的上一篇文章微信小程序定时订阅消息问题官方文档

{
    "permissions": {
        "openapi": [
        ]
    },
    "triggers": [{
        "name": "myTimer",
        "type": "timer",  
        "config": "0 55 7 * * * *"  //每天早起7点55执行
      }]
}

参考文章

云开发http请求的两种写法 | 微信开放社区

request-promise post请求微信小程序云函数调用http - Ocean123123 - 博客园

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值