首页 > 解决方案 > 我有firebase云功能,当邮递员提出请求时,该功能最终工作,但当我收到颤振请求时出错

问题描述

我试图从高级 REST 客户端发送请求,它工作正常,但从颤振不工作。

火力基地功能

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp(functions.config().firebase);

const quantity = 'quantity';
const colors = 'colors';
const price = 'price';
const db = admin.firestore();

exports.addProductQuantity = functions.https.onRequest((request, response) => {
    const ii = request.get('count');
    const id = request.get('product_id');
    const promise = db.collection(colors).doc(id).get();
    const p2 = promise.then(snapshot => {

        var newVal = snapshot.get(quantity);
        newVal = Number(newVal) + Number(ii); 
        db.collection(colors).doc(id).update({
            quantity: newVal
        });
        return response.status(200).send('OK '+newVal);
    });
    p2.catch(error => {
        console.log(error);
        return response.status(500).send(error.data);
    });
});

颤振代码

  static Future addProductQuantity(Product product) async {
    Map<String, dynamic> map = Map();
    map["product_id"] = "d0001";
    map["count"] = 25;

    final HttpsCallable callable = CloudFunctions.instance
        .getHttpsCallable(functionName: "addProductQuantity");

    try {
      dynamic resp = await callable.call(map);
    } catch (e) {
      print("Cloud Function Error: $e");
    }
  }

firebase 功能日志中的错误

    addProductQuantity
     Error: Value for argument "documentPath" is not a valid resource path. Path must be a non-empty string.
        at Object.validateResourcePath (/srv/node_modules/@google-cloud/firestore/build/src/path.js:403:15)
        at CollectionReference.doc (/srv/node_modules/@google-cloud/firestore/build/src/reference.js:1718:20)
        at exports.addProductQuantity.functions.https.onRequest (/srv/index.js:13:43)
        at cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:57:9)
        at /worker/worker.js:783:7
        at /worker/worker.js:766:11
        at _combinedTickCallback (internal/process/next_tick.js:132:7)
        at process._tickDomainCallback (internal/process/next_tick.js:219:9)

product_id在 ARC 中尝试过同样的方法,效果很好

标签: firebasefluttergoogle-cloud-functions

解决方案


我遇到了同样的问题,在使用邮递员进行测试时,我正在传递raw数据,然后jsonEncode在云功能中执行。当我jsonEncoded在 Flutter 中传递数据时,问题就出现了。

所以,我实际上执行了 jsonEncode 两次,这造成了一个问题。只需从云功能中删除 jsonEncode。


推荐阅读