【问题标题】:Cloud Functions for Firebase Could not handle the request after a successful request请求成功后 Cloud Functions for Firebase 无法处理请求
【发布时间】:2019-06-09 17:12:05
【问题描述】:

TLDR:将 JSON(成功)写入我的 Firestore 后,下一个请求将给我内部服务器错误 (500)。我怀疑问题在于插入尚未完成。

所以基本上,我有这个代码:

const jsonToDb = express();
exports.jsondb = functions.region('europe-west1').https.onRequest(jsonToDb);
jsonToDb.post('', (req, res) => {
    let doc;
    try {
        doc = JSON.parse(req.body);
    } catch(error) {
        res.status(400).send(error.toString()).end();
        return;
    }
    myDbFuncs.saveMyDoc(doc);
    res.status(201).send("OK").end();
}

数据库函数在另一个JS文件中。

module.exports.saveMyDoc = function (myDoc) {
    let newDoc = db.collection('insertedDocs').doc(new Date().toISOString());
    newDoc.set(myDoc).then().catch();
    return;
};

所以我有几个理论,也许其中一个没有错,但请帮助我。 (另外如果我在这个小sn-p中犯了一些错误,请告诉我。)

复制:

  1. 我发送第一个请求 => 一切正常,Json 在数据库中。

  2. 我在第一个请求给我 OK 状态后发送了第二个请求 => 它在几秒钟内没有做任何事情,然后 500:内部服务器错误。

日志:函数执行耗时 4345 毫秒,完成状态为:“连接错误”。

我只是不明白。假设我将它用作 API,同时有多个请求。 它不能处理吗?(我想它可以处理,只是我做了一些愚蠢的事情。)我故意在第一个请求完成后发送第二个请求并且发生这种情况。 我应该让 saveMyDoc 异步吗?

【问题讨论】:

    标签: json express google-cloud-firestore google-cloud-functions


    【解决方案1】:

    saveMyDoc 没有返回在所有异步工作完成后解决的承诺。如果您忘记了承诺,Cloud Functions 将在工作完成之前关闭工作并进行清理,使其看起来根本不起作用。您应该仅在所有工作完全完成后从 HTTP 类型函数发送响应。

    至少,它应该看起来更像这样:

    module.exports.saveMyDoc = function (myDoc) {
        let newDoc = db.collection('insertedDocs').doc(new Date().toISOString());
        return newDoc.set(myDoc);
    };
    

    然后你会在你的主函数中使用承诺:

    myDbFuncs.saveMyDoc(doc).then(() => {
        res.status(201).send("OK").end();
    }
    

    查看如何仅在数据保存后发送响应。

    documentation 中阅读有关 Cloud Functions 中异步编程的更多信息。还可以观看 video series 讨论如何在 Cloud Functions 中使用 Promise。

    【讨论】:

    • 我还有一个问题:我正在使用 lint,它给了我一个错误:Each then() should return a value or throw (promise/always-return)res.status(201).send("OK").end(); 更改为return res.status(201).send("OK").end(); 是一个不错的选择吗?
    • 我只会返回 null,因为 end() 的返回值没有任何意义。
    猜你喜欢
    • 2018-03-04
    • 2017-09-15
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2018-05-02
    • 2019-05-16
    • 2018-07-03
    相关资源
    最近更新 更多