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方法的传参格式 谢谢!!
mark
给你一个例子,试试。
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()
}
}
})
})
}
//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;
}
提示 Cannot find module 'request-promise'
我没有安装么?
如果用
request = require('request')
这种方法 怎么传递参数呢?
那就要写成 promise 格式 比较麻烦
所以用 现成的
npm install request-promise
用request-promise 这个吧 报 Cannot find module 'request-promise' 用request 写成 promise 这样吧 一直得不到参数 仅仅request传参 居然弄了一下午都没好 心累
npm install request-promise
没看到这个命令么
今天才看到!
控制台安装了以后,还是获得不了,最后把后端的获得方式改成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传入失败了?
应该和正常的request的post一样吧,我只试过get,是直接在url后面加,post的话你看看这个https://www.jianshu.com/p/a156729ce499
正常的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)
});
这种格式的依然还是接收不到。
不知道格式是怎样的 头疼啊
我网上随便找的一个接口,是可以访问成功的啊
//云函数
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 要不是“”
迷惑
这应该是接口的问题了吧(https://api.caisangzi.com/api/test_zzf),与request无关了,你可以弄个html用ajax试试能不能调用通
public function test_zzf(){
$a = $this->input->post('data',TRUE);
echo $a;
}
接口内仅有一个此方法,php ci框架 应该没什么问题吧,如果把上面的post换成get 地址栏后加参数是可以接收的。
6点了,下班不下