【发布时间】:2021-05-19 23:46:38
【问题描述】:
我试图在用户注册时添加到我的 firestore 数据库,但由于某种原因,代码根本没有到达 forEach 循环。我已经尝试添加一堆日志记录,如下所示。日志显示它到达了console.log('_createUser: 1.1');,但它从未到达console.log('_createUser: 2');。为什么不执行 forEach 循环?
注意 - 函数以状态码 200 结束。
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
// import { error } from 'firebase-functions/lib/logger';
admin.initializeApp();
exports.createUser = functions.https.onCall(async (data, context) => {
console.log('_createUser: ');
const uid = context?.auth?.uid;
if (uid) {
const username = data.user;
const email = data.email;
console.log('_createUser: 1');
//Check to see if that username already exists
const qData = await admin.firestore().collection('users').where('username', '==', username).limit(1).get();
console.log('_createUser: 1.1');
qData.forEach(doc => {
console.log('_createUser: 2');
const otherUsername = doc.get('username').toString();
if (otherUsername) {
console.log('_createUser: Username is already in use.');
return 'Username is already in use.'
}
else {
console.log('_createUser: 3');
//Create collection for this user's friends list
const friendsColl = 'friends_' + uid;
const friendsDoc = admin.firestore().collection(friendsColl).doc();
friendsDoc.set({
//Forces the collection to exist
exists: 1,
//Other useful data
createDate: admin.firestore.FieldValue.serverTimestamp(),
modifiedDate: admin.firestore.FieldValue.serverTimestamp(),
ownerUsername: username,
ownerUID: uid, //
rowType: 'B', //N = normal, B = backend (created for server side reasons)
})
.then(() => {
console.log("Document successfully written!");
})
.catch((error) => {
console.error("Error writing document: ", error);
});
console.log('_createUser: 4');
const userDoc = admin.firestore().collection('users').doc(uid); // use uid as document ID
userDoc.set({
createDate: admin.firestore.FieldValue.serverTimestamp(),
modifiedDate: admin.firestore.FieldValue.serverTimestamp(),
username: username,
email: email,
stat: 1, //0 = banned, 1 = normal
uid: uid,
friendsColl: friendsColl,
})
.then(() => {
console.log("Document successfully written!");
})
.catch((error) => {
console.error("Error writing document: ", error);
});
return console.log('_createUser_finished');
};
});
}
else {
return console.log('_createUser_Error: User is not authorized');
};
});
【问题讨论】:
-
控制台有错误吗?另外,记录数组并确保它不为空
-
@AluanHaddad 控制台中没有错误。我想我应该提到
const qData = await admin.firestore().collection('users').where('username', '==', username).limit(1).get();不会返回任何行,因为我尝试注册的用户名肯定不存在。之前,我设置了它,以便它检查qData是否存在,但它返回 true,所以我简单地删除了它。
标签: javascript typescript google-cloud-firestore google-cloud-functions