如何从云函数中的请求中获取参数?火力基地
Posted
技术标签:
【中文标题】如何从云函数中的请求中获取参数?火力基地【英文标题】:How to get parameters from request in cloud functions? Firebase 【发布时间】:2017-12-14 14:14:55 【问题描述】:我制作了 https 云函数,并使用 ios 应用程序向它发出请求。调用 Cloud 函数,因为我可以看到日志,但我无法从我从 iOS 应用程序发送的请求中获取参数。我尝试了几种不同的选择,但它们对我有所帮助,请告诉我如何才能达到结果?
const functions = require('firebase-functions');
const admin = require('firebase-admin');
module.exports = functions.https.onRequest((req, res) =>
console.log("getChatGroupConversationAvatars start", req.params);
const requestDict = req.params;
console.log("requestDict", requestDict);
const queryFormat = req.query.format;
console.log("queryFormat", queryFormat);
const conversationID = requestDict["conversationID"];
const currentUserID = requestDict["currentUserID"];
console.log("conversationID", conversationID, "currentUserID", currentUserID);
return console.log("getChatGroupConversationAvatars");
);
iOS 应用代码
class ChatAvatarsManager
func getChatGroupConversationAvatars(_ conversationID: String)
DispatchQueue.main.async
guard let currentUserID = RealmManager().getCurrentUser()?.id else return
DispatchQueue.global(qos: .background).async
let path = "https://us-central1-exampleapp.cloudfunctions.net/getChatGroupConversationAvatars"
guard let url = URL(string: path) else return
let parameters = ["conversationID" : conversationID, "currentUserID" : currentUserID]
AlamofireExampleManager.shared.request(url, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON (response) in
switch response.result
case .success:
debugPrint("getChatGroupConversationAvatars success")
case .failure(let error):
if error._code == NSURLErrorTimedOut
//timeout here
debugPrint("getChatGroupConversationAvatars timeOut")
debugPrint("getChatGroupConversationAvatars \(error)")
struct AlamofireExampleManager
static let shared: SessionManager =
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 10
let sessionManager = Alamofire.SessionManager(configuration: configuration)
return sessionManager
()
例如我在日志中得到了这个结果
conversationID undefined currentUserID undefined
我也试过了
module.exports = functions.https.onRequest((req, res) =>
const conversationID = req.params.conversationID;
const currentUserID = req.params.currentUserID;
console.log("conversationID", conversationID, "currentUserID", currentUserID);
return console.log("getChatGroupConversationAvatars");
);
【问题讨论】:
【参考方案1】:[[[FIRFunctions functions] HTTPSCallableWithName:@"functionName"] callWithObject:@@"key": value
completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error)
iOS 将数据放入 request.body.data.key 中,因此如果您在查询中查找来自 iOS 的传入数据,那么您正在寻找错误的地方伙伴。当您在 url 中使用 ?key=value 参数从浏览器调用该函数时,request.query.key 具有数据。但是当从应用程序调用时,传递的数据在 request.body.data 对象中 - 我检查了 iOS SDK 的源代码,是的,这就是它的实现方式。
【讨论】:
【参考方案2】:对于 Web:(POST 请求)
我们有:
export const myFunction = functions.https.onRequest((req, res) =>
const conversationID = req.body.conversationID;
const currentUserID = req.body.currentUserID;
return ;
);
参考:Firestore Read From Values
【讨论】:
感谢帮助!另请注意,默认情况下调用 httpsCallable 会将参数放入名为 data 的 json 对象中,因此我必须执行 req.body.data.conversationID【参考方案3】:我读了这个post 并重写了我的代码,所以它对我有用。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
module.exports = functions.https.onRequest((req, res) =>
const conversationID = req.query.conversationID;
const currentUserID = req.query.currentUserID;
console.log("conversationID", conversationID, "currentUserID", currentUserID);
return console.log("getChatGroupConversationAvatars");
);
【讨论】:
我不得不把那个家伙包裹在一个 cors(request, response, () => 中,我已经准备好了。谢谢!以上是关于如何从云函数中的请求中获取参数?火力基地的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio