Firebase功能-res.status未定义

时间:2019-10-12 11:23:44

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

这是我正在执行的代码:

exports.checkPin = functions.https.onCall(async (req, res) => {
    let roomDoc = await db.collection('Rooms').where('roomNum', "==", req.roomNum).get();
    if (roomDoc.exists) {
        if (bcrypt.compareSync(roomDoc.data().pin, req.pin)) {
            res.status(200).send("authorised");
        } else {
            res.status(401).send("unauthorised");
        }
    } else {
        res.status(401).send("unauthorised");
    }
});

执行代码后,它抛出一个错误,指出res.status()undefined

我做错什么了吗?如果Firebase函数执行完毕,我希望能够发送响应HTTP代码,这不是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

您正在混淆Callable Cloud FunctionsHTTP Cloud Functions

res.status(XXX).send("...");必须在HTTP云功能中完成,而不是在可调用的功能中完成。

,请注意,roomDoc返回QuerySnapshot而不是DocumentSnapshot

因此,您应该按以下方式调整功能(假设查询仅返回一个文档):

exports.checkPin = functions.https.onRequest(async (req, res) => {  // <--- See here, we use onRequest and not onCall


    const querySnapshot = await db.collection('Rooms').where('roomNum', "==", req.roomNum).get();

    if (!querySnapshot.empty) {

       const roomDoc = querySnapshot.docs[0];

        if (bcrypt.compareSync(roomDoc.data().pin, req.pin)) {
            res.send("authorised");
        } else {
            res.status(500).send("unauthorised");
        }

    } else {

        res.status(500).send("unauthorised");

     }

PS:您可以在HTTPS Cloud Functions上观看此官方视频:https://www.youtube.com/watch?v=7IkUgCLr5oA&t=1s&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=3