uni-app中dcloud云对象URL化后,event获取不到传递的值,求大佬解答

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app中dcloud云对象URL化后,event获取不到传递的值,求大佬解答

12 回复

用下面那种形式


我尝试过这个,一样也是空

回复 1***@qq.com: 我刚试了下都是可以的,,post请求,第一种方式,url后+?title=todo-title&content=todo-content 第二种方式,我上面发的那种,在_before: function() { // 通用预处理器 const httpInfo = this.getHttpInfo() console.log(‘33333333333’, httpInfo); }, 都可以拿到

回复 套马杆的套子: 谢谢大佬解答,添加 通用预处理器的方式发送post请求确实可以,我忽略预处理器了,发生get请求的话,queryStringParameters还是空,需要在预处理添加什么内容才可以显示出来呢,谢谢回复

回复 1***@qq.com: 解决了,还是apipost使用的问题,遵循官方文档即可

回复 1***@qq.com: 谢谢大佬解答

你看下,云对象我这么用的, 请求url是https://*****/web/test?title=todo-title&content=todo-content的,
module.exports = {
_before: function() { // 通用预处理器
const httpInfo = this.getHttpInfo()
console.log(‘33333333333’, httpInfo);
},

test(param1) {  
    console.log('111111111111', param1);  

    return param1  
}  

} test里的1111111会打印{ “title”: “todo-title”, “content”: “todo-content” },
如果是放到body json里,参数是{ “param1”:“2222” } 打印就是
33333333333 {
path: ‘/test’,
httpMethod: ‘POST’,
headers: {
accept: ‘/’,
‘accept-encoding’: ‘gzip, deflate’,
‘cache-control’: ‘no-cache’,
‘content-length’: ‘19’,
‘content-type’: ‘application/json’,
‘postman-token’: ‘cdd1243c-9c81-467b-92c0-5c9b44cdde7a’,
service: ‘web-fun’,
‘sofa-rpcid’: ‘0a4b07e317362984980435906233’,
‘sofa-traceid’: ‘0a4b07e317362984980435906233’,
sofa_head_method_name: ‘/web/test’,
‘user-agent’: ‘PostmanRuntime/7.4.0’,
‘x-djy-uuid’: ‘f0e914a7-c83c-4495-be07-52589ad30d7d’,
‘x-faas-context-bindconfigs’: ‘{“NEED_AUTH”:“false”,“NEED_SIGN”:“false”}’,
‘x-faas-context-binddomain’: ‘env-00jxhoob9v1j.dev-hz.cloudbasefunction.cn’,
‘x-faas-context-bindpath’: ‘/web’,
‘x-faas-runtime-call-context’: ‘{“appId”:“2021004147642798”,“traceId”:“0a4b07e317362984980435906233”,“rpcId”:“0.1.2”,“requestId”:“891b471c-1cba-48e8-88f6-b655b3debbba”,“eventType”:“http”}’,
‘x-faas-source-type’: ‘httpDefault’,
‘x-forwarded-for’: ‘124.237.76.85’,
‘x-forwarded-proto’: ‘https’,
‘x-real-ip’: ‘124.237.76.85’,
‘x-stream-request-id’: ‘e1c327a0-e04a-491f-a18e-b4a7626d2169’,
‘x5-uuid’: ‘f0e914a7-c83c-4495-be07-52589ad30d7d’
},
queryStringParameters: { title: ‘todo-title’, content: ‘todo-content’ },
body: ‘{“param1”:“2222”}’,
isBase64Encoded: false
}

const params = this.getParams()也可以

回复 套马杆的套子: 我测试的阿里云和支付宝云2个云空间,阿里云空间正常return返回数据,但是支付宝云只有云函数运行日志里面是有内容的,但是return不出来,event无法引用内容,你用的是阿里的云空间吗

回复 1***@qq.com: 我用的是支付宝云

官方示例: 使用GET请求https://${云对象Url化域名}/${触发路径}/${云对象方法名}?a=1&b=2,云对象接收到的event为 { path: ‘/${云对象方法名}’, httpMethod: ‘GET’, headers: {HTTP请求头}, queryStringParameters: {a: “1”, b: “2”}, isBase64Encoded: false }
云函数日志: 2025-01-08 10:32:57.092 [adminAnnouncement][USER][INFO][0a4b07bb17363035770824041221] execute: d688a8f6-76a2-4103-9929-273cbe3fcabe,{ path: ‘/addAnnouncement’, httpMethod: ‘GET’, headers: { accept: ‘/’, ‘accept-encoding’: ‘gzip, deflate, br’, ‘cache-control’: ‘no-cache’, ‘content-length’: ‘454’, ‘content-type’: ‘multipart/form-data; boundary=--------------------------964494404528125580825484’, service: ‘adminAnnouncement’, ‘sofa-rpcid’: ‘0a4b07bb17363035770824041221’, ‘sofa-traceid’: ‘0a4b07bb17363035770824041221’, sofa_head_method_name: ‘/announcement/addAnnouncement’, ‘user-agent’: ‘PostmanRuntime-ApipostRuntime/1.1.0’, ‘x-djy-uuid’: ‘6a81c371-1b09-4b27-8251-c5af3d20f368’, ‘x-faas-context-bindconfigs’: ‘{“NEED_AUTH”:“false”,“NEED_SIGN”:“false”}’, ‘x-faas-context-binddomain’: ‘env-00jxhew1a2ph.dev-hz.cloudbasefunction.cn’, ‘x-faas-context-bindpath’: ‘/announcement’, ‘x-faas-runtime-call-context’: ‘{“appId”:“2021004182661748”,“traceId”:“0a4b07bb17363035770824041221”,“rpcId”:“0.1.2”,“requestId”:“233e72b4-fb9d-48db-848b-98b9e286d803”,“eventType”:“http”}’, ‘x-faas-source-type’: ‘httpDefault’, ‘x-forwarded-for’: ‘39.154.168.205’, ‘x-forwarded-proto’: ‘https’, ‘x-real-ip’: ‘39.154.168.200’, ‘x-stream-request-id’: ‘ec1cf0cb-85a9-4fa5-a950-ebf55dabe1cf’, ‘x5-uuid’: ‘6a81c371-1b09-4b27-8251-c5af3d20f368’ }, queryStringParameters: {}, body: ‘’, isBase64Encoded: ‘’ }
apipost:发送body下form-data数据,但是云函数内还是接收不到,使用url?字段可以接收,是我apipost使用的不对吗?(图片可以参考正文)

在uni-app中使用dcloud云对象进行URL化后,如果在事件处理中无法获取传递的值,这通常是由于数据传递或事件绑定方式不正确导致的。以下是一个简化的示例代码,展示如何在uni-app中正确传递和获取值。

1. 准备工作

确保你已经配置好dcloud云开发环境,并在云函数中设置了必要的逻辑。

2. 云函数示例(cloudfunctions/hello/index.js)

// 云函数入口文件
exports.main = async (event, context) => {
    // 获取传递的参数
    const { name } = event;
    return {
        success: true,
        message: `Hello, ${name}!`,
    };
};

3. 前端代码(uni-app 页面)

<template>
    <view>
        <button @click="callCloudFunction">Call Cloud Function</button>
        <text>{{ result }}</text>
    </view>
</template>

<script>
export default {
    data() {
        return {
            result: ''
        };
    },
    methods: {
        async callCloudFunction() {
            try {
                const res = await uni.cloud.callFunction({
                    name: 'hello',
                    data: {
                        name: 'uni-app User'
                    }
                });
                this.result = res.result.message;
            } catch (error) {
                console.error('Cloud function call failed:', error);
            }
        }
    }
};
</script>

<style scoped>
button {
    margin: 20px;
}
text {
    display: block;
    margin-top: 20px;
}
</style>

4. 说明

  • 云函数:在云函数中,我们通过event对象获取传递的参数name,并返回一个包含问候语的对象。
  • 前端代码:在uni-app页面中,我们定义一个按钮和一个文本显示区域。点击按钮时,调用callCloudFunction方法,该方法通过uni.cloud.callFunction调用云函数,并传递参数{ name: 'uni-app User' }。调用成功后,将返回的结果赋值给result数据属性,以便在页面上显示。

5. 调试建议

  • 确保云函数已经正确部署并可用。
  • 检查前端代码中云函数名称和数据参数是否正确。
  • 使用开发者工具的云函数调试功能,查看云函数的输入和输出,确保数据正确传递和处理。

通过上述代码和步骤,你应该能够在uni-app中正确调用dcloud云函数,并在事件处理中获取传递的值。如果问题依旧存在,请检查具体的错误信息和调用日志,以便进一步定位问题。

回到顶部