问题描述
我只是想获取Firestore Functions,以将来自Firestore的新文档中的信息传递到Algolia索引中。不幸的是,我只能得到传递的部分变量,但不是全部,我也不知道为什么。 (请查看下面的图片以获取更多背景信息。)
请注意,并非所有字段都已传递。但是,即使在代码内部(请参见下文),我也试图显式调用这些字段并使它们通过。请帮助!
代码
//////////////////////////////////////////////////////////////////////////////////
//Setting up and initializing. //
//////////////////////////////////////////////////////////////////////////////////
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const algoliasearch = require('algoliasearch');
admin.initializeApp(functions.config().firebase);
///////////////////////////////////////////////////////////////////////////////////
// Initialize Algolia,requires installing Algolia dependencies: //
// https://www.algolia.com/doc/api-client/javascript/getting-started/#install //
// App ID and API Key are stored in functions config variables //
///////////////////////////////////////////////////////////////////////////////////
const ALGOLIA_ID = functions.config().algolia.appid;
const ALGOLIA_ADMIN_KEY = functions.config().algolia.apikey;
const ALGOLIA_SEARCH_KEY = functions.config().algolia.search_key;
const ALGOLIA_INDEX_NAME = 'searchable_courses';
const client = algoliasearch(ALGOLIA_ID,ALGOLIA_ADMIN_KEY);
////////////////////////////////////////////////////////////////////////////////////
//ADDING A FUNCTION THAT UPDATES THE INDEX EACH TIME A COURSE IS MADE //
////////////////////////////////////////////////////////////////////////////////////
exports.onCourseCreated = functions.firestore.document('searchable_courses/{courseID}')
.onCreate((snap,context) => {
// Get the newly made "course" document
const course = snap.data();
// Trying to add all the fields from the Firestore "course" document into Algolia index.
course.objectID = context.params.courseID;
course.courseID = context.params.courseID;
course.courseTitle = context.params.courseTitle;
course.authorUID = context.params.authorUID;
course.description = context.params.description;
course.subscriptionRate = context.params.subscriptionRate;
course.numberOfSubscribers = context.params.numberOfSubscribers;
course.datePosted = context.params.datePosted;
course.numberOfLectures = context.params.numberOfLectures;
course.numberOfQuestions = context.params.numberOfQuestions;
// Write to the algolia index
const index = client.initIndex(ALGOLIA_INDEX_NAME);
return index.saveObject(course);
});
解决方法
从新创建的文档获得的数据不存在于context
参数中。它位于snap
参数中,该参数是一个DocumentSnapshot对象。现在,您将从快照中获取的所有数据都覆盖到course
变量中。
您应该删除使用context.parameter.X
的所有行,并将course
对象从文档快照中获取时直接传递给Algolia。
我建议还回顾documentation for Firestore triggers,以更好地了解它们的工作原理。