Около двух месяцев назад я опубликовал сообщение об использовании 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);
});

Надеюсь, миграция не окажется слишком сложной, и эта запись в блоге хоть немного поможет вам! Удачи!