Firebase db在HTTPS上没有定义



我正在创建一个Firebase HTTPS函数,从Firestore读取数据并返回给用户。

然而,我得到'db is not defined'。我试过不同的写法,比如const db = firebase.firestore();,但这会导致错误TypeError: firestore.firestore is not a function

这是我写的代码

const functions = require("firebase-functions");
const admin = require('firebase-admin');
const { firestore } = require("firebase-admin");
admin.initializeApp();
const db = firestore.firestore();

exports.getUsers = functions.https.onRequest((request, response) => {
let user = request.query.user;
let ids = getIdsOfUsersWhoHaveSeenUser(user);
let jsonBody = {
"users": ids
}
let responseBody = JSON.stringify(jsonBody);
response.send(responseBody);
});
function getIdsOfUsersWhoHaveSeenUser(user) {
const query = db.collection('users').whereField('seenUsers', arrayContains(user));
query.get()
.then(snapshot => {
const documents = snapshot.docs;
const ids = documents.map(doc => doc.id);
return ids;
})
.catch (error => {
console.log(error);
});
};

我也试过admin.firestore().collection(),但这也不起作用。

你应该这样做:

const functions = require("firebase-functions");
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

admin是可以对Cloud Firestore进行更改的管理应用实例。


另外你需要:

  1. 正确返回getIdsOfUsersWhoHaveSeenUser函数中的Promise链
  2. 注意whereField()不是Admin SDK的一个方法。您应该使用where()方法,参见文档。

function getIdsOfUsersWhoHaveSeenUser(user) {
const query = db.collection('users').where("seenUsers", "array-contains", "user");  // <== See change here
return query.get()   // <== See return here
.then(snapshot => {
const documents = snapshot.docs;
const ids = documents.map(doc => doc.id);
return ids;
})
.catch (error => {
console.log(error);
});
};

,还要考虑到这个getIdsOfUsersWhoHaveSeenUser函数是异步的。

exports.getUsers = functions.https.onRequest((request, response) => {
let user = request.query.user;
getIdsOfUsersWhoHaveSeenUser(user)
.then(ids => {
let jsonBody = {
"users": ids
}
let responseBody = JSON.stringify(jsonBody);
response.send(responseBody);
});
});

最新更新