本地测试带查询字符串的Firebase HTTP Cloud Functions GET请求
解决Firebase HTTP Cloud Function带查询参数的GET调用问题
我之前也踩过这个坑!在Firebase Shell里调用带查询参数的GET函数时,直接传对象的方式是不对的,这就是你拿不到req.query.name的原因。
为什么之前的调用失败?
你用test.get({"name":"test"})的时候,这个传入的对象会被当成请求体(request body),而不是URL上的查询参数。GET请求默认不会携带请求体,所以req.query自然取不到值,返回undefined。
正确的Shell调用方式
有两种方法可以在Firebase Shell里传递查询参数:
通过配置对象传递
调用get方法时,第一个参数留空(因为GET请求不需要请求体),第二个参数传入包含query字段的配置对象:test.get({}, { query: { name: "test" } })这样你的云函数里
req.query.name就能正确获取到"test"了。直接传入带查询字符串的URL路径
也可以直接模拟真实URL的查询字符串格式:test.get("?name=test")Firebase Shell会自动解析这个字符串里的参数到
req.query中。
云函数代码验证
你原来的代码逻辑是对的,只要调用方式正确,console.log(req.query.name);就能输出预期的参数值。这里再贴一下示例代码确认:
exports.test = functions.https.onRequest((req, res) => { console.log(req.query.name); // 现在能拿到正确的值了 res.send(`Hello ${req.query.name}`); });
额外提示(部署后调用)
如果你的函数已经部署到线上,直接通过HTTP请求调用时,只需要在URL后拼接查询字符串即可:
https://<你的项目ID>.cloudfunctions.net/test?name=test
内容的提问来源于stack exchange,提问作者ellaRT
相关产品推荐
相关产品推荐

