收藏
回答

云函数可以做http请求吗?

框架类型 问题类型 终端类型 AppID 基础库版本
小游戏 需求 工具 wx8888e6cf48888ce&secret 2.3.0

用wx.login获取openid需要到服务器交换一次


如果云开发的云函数可以做http请求,那就非常完美了。


试了一下,发现不行。


想问一下官方的大神,是原本就不行,还是我人品不够好?


代码如下:


// 云函数入口函数

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

request({

url: 'test.php',

header: {

'content-type': 'application/json' // 默认值

},

method: 'GET',

dataType: 'json',

responseType: 'text',

success: function(res) {

console.log(res)

},

fail: function(res) {

console.log(res);

},

complete: function(res) {}

})

}


之前是些wx.request,错误提示说wx未定义。


然后改成request,说request未定义


在云函数内测试,结果如下


返回结果:

{"errorCode":10004,"errorMessage":"user code exception caught","stackTrace":"ReferenceError: request is not defined\n    at EventHandler.exports.main [as realHandler] (/var/user/index.js:8:3)\n    at EventHandler.handle (/var/runtime/node8/bootstrap.js:238:34)\n    at invoke (/var/runtime/node8/bootstrap.js:111:22)\n    at Timeout.setTimeout [as _onTimeout] (/var/runtime/node8/bootstrap.js:61:9)\n    at ontimeout (timers.js:475:11)\n    at tryOnTimeout (timers.js:310:5)\n    at Timer.listOnTimeout (timers.js:270:5)"}


那也就是说:


除了在文档内列出的,小程序端api和服务端api外,其他的都不能在云函数执行是吗?



最后一次编辑于  2018-09-21
回答关注问题邀请回答
收藏

5 个回答

  • 张吉(jimmyjzhang)
    张吉(jimmyjzhang)
    2018-09-21

    云函数内访问外部接口是支持的。


    request应用使用npm的request库,外部接口不需要使用SDK

    2018-09-21
    有用 3
    回复 3
    • 2018-09-23

      小哥哥


      你的意思是,要用nodejs的写法吗?


      比如这样子:


      request('您的请求url', function (error, response, body) {  if (!error && response.statusCode == 200) {    console.log(body) // 请求成功的处理逻辑  } });

      2018-09-23
      回复
    • 2018-09-23

      我试了一下,还是说request未定义吖~~~



      2018-09-23
      回复
    • 🍂
      🍂
      2021-09-01回复
      在 上面加上一句 const request = require("request")
      2021-09-01
      回复
  • 编程小石头
    编程小石头
    2019-09-23
    const cloud = require('wx-server-sdk')
    //引入request-promise用于做网络请求
    var rp = require('request-promise');
    cloud.init()
     
    // 云函数入口函数
    exports.main = async (event, context) => {
      let url = 'https://www.baidu.com';
      return await rp(url)
        .then(function (res) {
          return res
        })
        .catch(function (err) {
          return '失败'
        });
    }


    上面代码亲测可用,记得 npm install  request-promise


    2019-09-23
    有用 1
    回复
  • 2018-09-23

    哎呀


    可以了


    我一直没转过弯


    原来是要加上request的申明


    搞定了,谢谢小哥哥哈哈。


    var request = require('request');


    加上这句,用小程序api里面的request,或者nodejs的,都可以。

    2018-09-23
    有用 1
    回复 4
    • Dream
      Dream
      2018-10-03

      楼主怎么搞的,我也是出现那个情况啊

      2018-10-03
      回复
    • 2019-02-20回复Dream

      就是在加上var request = require('request');


      就可以了.

      2019-02-20
      1
      回复
    • 子厄,深藏不露的东风妖霸CM
      子厄,深藏不露的东风妖霸CM
      2021-03-04
      给力,有用!!!
      2021-03-04
      回复
    • happy
      happy
      2022-02-17
      能给个源码吗?我的没用呀,引入之后
      2022-02-17
      回复
  • 包子
    包子
    2021-08-19

    问一下请求之前 需要npm i吗 在哪个根目录了

    2021-08-19
    有用
    回复
  • Keep Moving
    Keep Moving
    2020-10-07

    大佬,这个可以请求https的,那支持http的吗

    2020-10-07
    有用
    回复
登录 后发表内容