收藏
回答

云开发request问题求答

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 需求 工具 wxac46f6af9bddb76f 未知

exports.main = async (event, context) => {

return new Promise((resolve, reject) => {

let url = ' '

request( url, function (error, response, body) {

return resolve(body)

})

})

}

关于云开发发起网络请求 文档说:

Node.js 提供的原生 http 接口在云函数中发起网络请求,我们还可以使用一个流行的 Node.js 网络请求库 request 来更便捷的发起网络请求。

但是这个不知道如何选择使用get或post方法,尤其不知道如何参数传递,百度了很久 node request的get post方法 和两个方法的参数传递 都找不到一个合适的参考。

麻烦给个代码格式参考,展示一下post方法的传参格式 谢谢!!


回答关注问题邀请回答
收藏

4 个回答

  • ᯤ²ᴳ何利斌
    ᯤ²ᴳ何利斌
    2018-10-27

     mark

    2018-10-27
    有用
    回复
  • 晓峰
    晓峰
    2018-10-18

    给你一个例子,试试。

    1、云函数json文件

    {

      "name": "",

      "private": true,//重点在这里,要定义下,不然会报错

      "version": "1.0.0",

      "description": "",

      "main": "index.js",

      "scripts": {

        "test": "echo \"Error: no test specified\" && exit 1"

      },

      "author": "",

      "license": "ISC",

      "dependencies": {

        "wx-server-sdk": "latest"

      }

    }

    2、云函数js内容

    // 云函数入口文件

    const cloud = require('wx-server-sdk')

    const request = require('request')

    const API_URL =  ''

    cloud.init()


    // 云函数入口函数

    exports.main = async (event, context) => {

      var url = API_URL

      // return{

      //   event,context

      // }

      return new Promise((resolve, reject) => {

        request.get(url, (error, response, body) => {

          if (error) {

            reject()

          } else {

            try {

              resolve(body)

            } catch (e) {

              reject()

            }

          }

        })

      })

    }



    2018-10-18
    有用
    回复
  • 半寸灰
    半寸灰
    2018-10-15


    //npm install  request-promise

    const rp = require('request-promise');





    // 云函数入口函数

    exports.main = async(event, context) => {





    var res = await rp(

    {

    method: 'post',

    uri: 'https://xxxx.com',

    body: {

    xxx:'xxx'

    },//参数

    headers: {},//请求头

    json: true  //是否json数据

    }

    ).then((  body) => {


    return body


    }).catch(err => {

    return err;

    })



    return res;


    }


    2018-10-15
    有用
    回复 14
    • 2018-10-15

      提示  Cannot find module 'request-promise'  


      我没有安装么?


      如果用

      request = require('request')

      这种方法 怎么传递参数呢?




      2018-10-15
      回复
    • 半寸灰
      半寸灰
      2018-10-15回复

      那就要写成 promise  格式  比较麻烦


      所以用 现成的  

       npm install  request-promise

      2018-10-15
      回复
    • 2018-10-15

      request-promise 这个吧 报 Cannot find module 'request-promise'    用request 写成 promise  这样吧 一直得不到参数 仅仅request传参 居然弄了一下午都没好 心累

      2018-10-15
      回复
    • 半寸灰
      半寸灰
      2018-10-15回复

       npm install  request-promise


      没看到这个命令么

      2018-10-15
      回复
    • 2018-10-16

      今天才看到!


      控制台安装了以后,还是获得不了,最后把后端的获得方式改成get 就可以获得了,但云函数里写的是post

      exports.main = async (event, context) => {

      var res = await rp(

      {

      method: 'post',

      uri: 'https://api.caisangzi.com/api/test_zzf',

      qs: {

      data: 'xxx'

      },//参数

      headers: {},//请求头

      json: true  //是否json数据

      }

      ).then((body) => {

      return body

      }).catch(err => {

      return err;

      })

      return res;

      }

      这里的 method 是post 后台获得却要用get 怎么回事? 这个post传入失败了?

      2018-10-16
      回复
    查看更多(9)
  • 2018-10-15

    应该和正常的request的post一样吧,我只试过get,是直接在url后面加,post的话你看看这个https://www.jianshu.com/p/a156729ce499

    2018-10-15
    有用
    回复 5
    • 2018-10-15

      正常的request传递的参数接收不到。

      request( {url:url, data: data}, function (error, response, body) {

      return resolve(body)

      })

      这种格式的同样也接收不到,

      request.post({url: url,data: data}, function (error, response, body) {

      return resolve(body)

      });

      这种格式的依然还是接收不到。

      不知道格式是怎样的 头疼啊

      2018-10-15
      回复
    • 2018-10-15回复



      我网上随便找的一个接口,是可以访问成功的啊

      2018-10-15
      回复
    • 2018-10-15

      //云函数

      exports.main = async (event, context) => {

          return new Promise((resolve, reject) => {

              let url = 'https://api.caisangzi.com/api/test_zzf'

              request.post({ url: url, data: 'test' }, function (err, resp, body){

              return resolve(body)

              })

          })

      }



      //小程序内

      request:function(){

          wx.cloud.callFunction({

              name: 'request',

              success: res => {

              console.log(res)

              },

              fail: err => {

              console.log(res)

              }

          })

      },


      //控制台输出

      {errMsg: "cloud.callFunction:ok", result: ""}

      还是得不到数据 是哪里出问题了么?

      如果地址栏传参数,可以打印出来 ,其他方法 要不是null 要不是“”

      迷惑






      2018-10-15
      回复
    • 2018-10-15回复

      这应该是接口的问题了吧(https://api.caisangzi.com/api/test_zzf),与request无关了,你可以弄个html用ajax试试能不能调用通

      2018-10-15
      回复
    • 2018-10-15

      public function test_zzf(){

      $a =  $this->input->post('data',TRUE);

      echo $a;

        }


      接口内仅有一个此方法,php ci框架 应该没什么问题吧,如果把上面的post换成get  地址栏后加参数是可以接收的。

      6点了,下班不下


      2018-10-15
      回复
登录 后发表内容