如何在云函数中获取请求参数?Firebase

28

我创建了https云函数,并在iOS应用程序中向其发出请求。云函数已被调用,因为我可以看到日志,但我无法从我从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");
});
3个回答

67

我阅读了这篇文章,然后重写了我的代码,现在它可以正常工作了。

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");
});

2
我不得不在cors(request, response, () => {})中包装那个家伙,然后就完成了。谢谢! - Mark Lancaster

8

对于Web:(POST请求)

我们有:

export const myFunction = functions.https.onRequest((req, res) => {

    const conversationID = req.body.conversationID;
    const currentUserID = req.body.currentUserID;

 return ;
});

参考:从Firestore读取值


6
谢谢,这很有帮助!另外请注意,默认情况下调用 httpsCallable 会将参数放入名为 data 的 JSON 对象中,因此我需要执行 req.body.data.conversationID。 - Jerry Sha

0
[[[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的源代码,是这样实现的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接