Raw*_*mad 2 node.js firebase google-cloud-functions google-cloud-firestore
许多博客建议切换到Cloud Firestore,因为它很容易且安全可靠。来自实时数据库,返回使用Function + RD时,很容易浏览文档触发器,例如ref.parent
我的设置是这样的:
- 用户数
- {用户身份}
- last_seen:“数据”
- {形式}
- {formid}
但是,我使用添加了一个文档触发器onCreate,并且我想获取以下值last_seen:
exports.updateUser = functions.firestore.document('users/{userId}/forms/{formid}').onCreate((snap, context) => {
const newValue = snap.data();
console.log("test value : " + newValue.test); // works
console.log("form id: " + context.params.formid); // works
console.log("user last seen : " + newValue.last_seen); // doesn't work, can't access the parent collection data
});
Run Code Online (Sandbox Code Playgroud)
Den*_*lek 10
我完全不满意改用Firestore,但是在这种情况下几乎完全相同。
实时获得快照:
exports.doStuff = functions.database.ref('/users/{userId}/forms/{formId}')
.onCreate((snapshot, context) => {
const ref = snapshot.ref;
const userRef = ref.parent.parent;
userRef.once('value').then(parentSnap => {
const user = parentSnap.val();
const lastSeen = user.last_seen;
});
});
Run Code Online (Sandbox Code Playgroud)
在Firestore中:
exports.doStuff = functions.firestore.document.onCreate('/users/{userId}/forms/{formId}')
.onCreate((snapshot, context) => {
const ref = snapshot.ref;
const userRef = ref.parent.parent;
userRef.get().then(parentSnap => {
const user = parentSnap.data();
const lastSeen = user.last_seen;
});
});
Run Code Online (Sandbox Code Playgroud)
要考虑的另一件事是,您正在传递userId参数,因此您可以仅构建自己的DocumentReference(假设您还使用firebaseAdmin)
functions.firestore.document.onCreate('/users/{userId}/forms/{formId}')
.onCreate((snapshot, context) => {
const userId = context.params.userId;
const userRef = firebaseAdmin.firestore().collection('users).doc(userId);
userRef.get().then(parentSnap => {
const user = parentSnap.data();
const lastSeen = user.last_seen;
});
});
Run Code Online (Sandbox Code Playgroud)
它还使您可以取消经常使用的功能的逻辑,将其视为“帮助器”方法:(注意,我偶然切换到异步/等待,这更干净了)
functions.firestore.document.onCreate('/users/{userId}/forms/{formId}')
.onCreate(async (snapshot, context) => {
const userId = context.params.userId;
const lastSeen = await getLastSeen(userId);
});
// == Helper Functions ==-------------------
export async getLastSeen(userId) {
if (!userId) return Promise.reject('no userId');
// User Ref
const userSnap = await firebaseAdmin.firestore().collection('users').doc(userId).get();
return userSnap.data().last_seen;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以getLastSeen()在需要时使用它,并且如果进行更改,则只需调整该功能即可。如果不是您经常打电话的东西,那就不用担心,但我会考虑提供getUser()帮助的...
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |