【问题标题】:how to make web use firebase cloud function(express) + hosting + firestore如何使网络使用firebase云功能(快递)+托管+ firestore
【发布时间】:2018-12-19 16:14:23
【问题描述】:

我正在 Firebase 上制作网站。

现在我的网站正在运行。

但我不知道如何读取 Firestore 数据和响应数据。

router.get('/', function(req, res, next) {
    admin.firestore().collection('post').get()
    .then(snap => {
        const data = snap.size;
        console.log("size: " + data);
        return res.status(200).send(data);
    }).catch(err => {
        console.log(err);
        res.status(500).send(err);
    });
});
module.exports = router;

日志是工作但不是响应。

RangeError: Invalid status code: 24
    at ServerResponse.writeHead (_http_server.js:192:11)
    at ServerResponse.writeHead (/user_code/node_modules/express-session/node_modules/on-headers/index.js:55:19)
    at ServerResponse._implicitHeader (_http_server.js:157:8)
    at ServerResponse.OutgoingMessage.end (_http_outgoing.js:573:10)
    at ServerResponse.end (/user_code/node_modules/express-session/index.js:354:19)
    at ServerResponse.send (/user_code/node_modules/express/lib/response.js:221:10)
    at admin.firestore.collection.get.then.snap (/user_code/routes/main.js:14:26)
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

【问题讨论】:

  • @FrankvanPuffelen 实际上,在这种情况下它是一个 QuerySnapshot,它确实有一个 size 属性。

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


【解决方案1】:

const data = snap.size 给你一个数字类型变量,它是你刚刚查询的集合的大小。当您将一个数字传递给 send() 时,它似乎告诉 Express 您希望将该数字作为 HTTP 状态代码发送给客户端(显然它会覆盖您使用 status() 设置的内容)。 send() 的 API 文档甚至没有说您可以传递数字。

如果您想发送一个数字作为响应的正文,请尝试将其转换为字符串:

res.status(200).send('' + data);

或者将其捆绑成一个 JSON 对象供客户端解析,这样可能更好。

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 2020-12-27
    • 2021-10-05
    • 2018-05-09
    • 1970-01-01
    • 2018-11-22
    • 2018-06-30
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多