云函数可以做http请求吗?
发布于 4 年前 作者 mingpeng 20317 次浏览 来自 问答

用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外,其他的都不能在云函数执行是吗?

3 回复

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

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

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

哎呀

可以了

我一直没转过弯

原来是要加上request的申明

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

var request = require(‘request’);

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

回到顶部