欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。
云函数URL化后,通过HTTP请求调用时,参数的传递方式和位置会发生变化。你现在的代码直接从event对象顶层解构cid等参数,这在uniCloud.callFunction调用时没问题,但URL化后参数并不在顶层。
根据知识库中的信息,URL化后获取请求参数的方式不同,需要根据请求类型(GET/POST)从event的不同属性中获取。
问题原因
使用uniCloud.callFunction时,参数会直接放在event对象上。但云函数URL化后,参数的位置取决于HTTP请求的方法和Content-Type:
- GET请求的参数在
event.queryStringParameters中。
- POST请求(如JSON格式)的参数在
event.body中,并且可能是Base64编码的。
正确写法参考
你需要修改云函数代码,从正确的位置解析参数。以下是一个适配URL化(POST JSON请求)的示例:
'use strict'
const uniPush = uniCloud.getPushManager({
appId: '__UNI__xxxxxxx'
})
exports.main = async (event) => {
// URL化获取参数的方式
let body = event.body
if(event.isBase64Encoded) {
body = Buffer.from(body, 'base64').toString()
}
const params = JSON.parse(body)
const { cid, title, content, payload, settings } = params
if (!cid) {
return { code: 400, msg: '缺少cid参数' }
}
try {
const result = await uniPush.sendMessage({
push_clientid: cid,
force_notification: true,
settings: settings,
title: title || '通知标题1',
content: content || '通知内容1',
payload: payload || {}
})
return { code: 200, msg: '推送成功', data: result }
} catch (e) {
return { code: 500, msg: '推送失败', error: e.message }
}
}
本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码
建议步骤
- 按上述方式修改云函数代码并重新上传部署。
- 在Postman中调用时,确保选择
POST方法,并在Body中选择raw和JSON格式,填写参数如:{"cid": "你的客户端推送标识", "title": "测试标题", "content": "测试内容"}。
- 如果仍有疑问,可以在云函数开头增加
console.log('event:', event),然后查看云函数日志,确认URL化后event对象的具体结构。
关于云函数URL化获取参数的详细说明,请参考官方文档:云函数URL化。
1 个回复
Ask小助手 - Ask社区AI助手
云函数URL化后,通过HTTP请求调用时,参数的传递方式和位置会发生变化。你现在的代码直接从
event对象顶层解构cid等参数,这在uniCloud.callFunction调用时没问题,但URL化后参数并不在顶层。根据知识库中的信息,URL化后获取请求参数的方式不同,需要根据请求类型(GET/POST)从
event的不同属性中获取。问题原因
使用
uniCloud.callFunction时,参数会直接放在event对象上。但云函数URL化后,参数的位置取决于HTTP请求的方法和Content-Type:event.queryStringParameters中。event.body中,并且可能是Base64编码的。正确写法参考
你需要修改云函数代码,从正确的位置解析参数。以下是一个适配URL化(POST JSON请求)的示例:
建议步骤
POST方法,并在Body中选择raw和JSON格式,填写参数如:{"cid": "你的客户端推送标识", "title": "测试标题", "content": "测试内容"}。console.log('event:', event),然后查看云函数日志,确认URL化后event对象的具体结构。关于云函数URL化获取参数的详细说明,请参考官方文档:云函数URL化。
要回复问题请先登录或注册
公告
更多>相关问题