Около двух месяцев назад я опубликовал сообщение об использовании Algolia для реализации функции поиска в вашем проекте Firebase. Сюда входит раздел об использовании облачных функций Firebase SDK для синхронизации данных между вашими индексами Algolia и базой данных Firebase Realtime.
После этого сообщения команда Firebase переместила Cloud Functions с бета-версии на 1.0 - технически на 1.0.4 на момент написания этой статьи - и с миграцией произошли некоторые критические изменения. В оставшейся части этого сообщения в блоге я предоставлю обновленные образцы кода для запуска облачных функций, которые были включены в мое исходное пошаговое руководство.
Инициализация администратора Firebase
Метод functions.config().firebase
был удален, поэтому теперь вы можете либо инициализировать его без каких-либо параметров, либо, если вы хотите предоставить некоторую конфигурацию, вы можете использовать process.env.FIREBASECONFIG
следующим образом:
const functions = require('firebase-functions'); const admin = require('firebase-admin');
admin.initializeApp();
/// OR ///let firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG);
admin.initializeApp(firebaseConfig)
Синхронизация данных
С тех пор параметр event
был заменен и разделен на change
и context
для _9 _ / _ 10_ функций. У них также есть _11 _ / _ 12_ полей, которые содержат (как вы уже догадались!) Данные до и после изменения. Для _13 _ / _ 14_ функций event
разделен на _16 _ / _ 17_. Кроме того, параметр data
раньше был DeltaSnapshot
, но в 1.0 теперь это DataSnapshot
, так что будьте осторожны.
const client = algoliasearch( functions.config().algolia.app_id, functions.config().algolia.api_key ); const ALGOLIA_USERS_INDEX = "Team"; exports.usersEntry = functions.database.ref(`/Users/{userUID}/`).onWrite((change, context) => { const index = client.initIndex(ALGOLIA_USERS_INDEX); const changeSnapshot = change.after.val(); if (!change.after.val()) { return; } const firebaseObject = { displayname: changeSnapshot.displayname, picture: changeSnapshot.picture, username: changeSnapshot.username, objectID: context.params.userUID, }; return index.saveObject(firebaseObject); }); exports.userIndexDeletion = functions.database.ref(`Users/{userUID}`).onDelete((snap, context) => { const index = client.initIndex(ALGOLIA_USERS_INDEX); const objectID = context.params.userUID; return index.deleteObject(objectID); });
Надеюсь, миграция не окажется слишком сложной, и эта запись в блоге хоть немного поможет вам! Удачи!