6

我正在尝试通过 Insomnia API 使用 HTTP 查询来查询我的 Firestore 数据库:

https://firestore.googleapis.com/v1/projects/typebot/databases/(default)/documents/users

有了这个身体:

{
  "structuredQuery": {
    "from": [
        {
            "collectionId": "users"
        }
    ],
    "where": {
        "fieldFilter": {
            "field": {
                "fieldPath": "email"
            },
            "op": "EQUAL",
            "value": {
                "stringValue": "email@test.com"
            }
        }
    }
  }
}

我收到以下错误:

HTTP 查询:HTTP/2 成帧层中的流错误

知道有什么问题吗?

4

2 回答 2

0

可以尝试将“GET”更改为“POST”

于 2021-11-20T19:30:26.847 回答
0

我在执行GET请求时遇到了类似的问题:

GET https://us-central1-my-project-id.cloudfunctions.net/getUsers HTTP/1.1
content-type: application/json
{
        "minAge": "18"
}

针对由此 Firestore HTTP Cloud 函数定义的端点:

exports.getUsers = functions.https.onRequest(async (req, res) => {
    // find matching users by age limit.
    const ageLimit = req.body.age;
    ... 
  
});

事实证明,基于this other SO post,请求正文GET没有任何意义,因为HTTP规范建议“在处理请求时应该忽略消息正文”(大概是由服务器和Firestore 服务器实现此行为)。奇怪的是,我没有发现使用 Functions 模拟器在本地运行完全相同的函数的这个问题,因此本地服务器很可能忽略了这个建议。

为了解决这个问题,我改变了我的函数来解析查询参数而不是请求正文:

exports.getUsers = functions.https.onRequest(async (req, res) => {
    // find matching users by age limit.
    const ageLimit = req.query.age; // extract the age as a query param
    ... 
  
});

和请求:

GET https://us-central1-my-project-id.cloudfunctions.net/getUsers?age=18
于 2021-08-16T18:58:10.567 回答