如果用户创建新文档,如何使用云函数将 Firestore 数据索引到 Algolia?
How to index Firestore data into Algolia using cloud functions if a user creates a new document?
要求的行为:
我想创建一个云函数,每当用户在 Firestore 中创建一个新文档时,它就会向 Algolia 索引添加一个新条目。
当前状态
如果用户创建新文档,云功能会成功触发。但是,该函数不会为 Algolia 索引创建新条目。
问题
相反,它会抛出一个我不理解的 firestore 控制台错误。该函数不会抛出任何额外的 ts-lint 错误。
What does the error mean and how can I fix it? Do I handle
the document ID correctly or is there an issue with the Algolia configuration?
我的代码:
// importing libaries
import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
import * as algoliasearch from 'algoliasearch';
// setting up environment
const ALGOLIA_APP_ID = 'my-app-id';
const ALGOLIA_ADMIN_KEY = 'my-admin-key';
admin.initializeApp(functions.config().firebase);
// Call onCreate to add data to ALgolia Index
export const ideaIndexAdd = functions.firestore
.document('ideas/{ideaID}')
.onCreate((snap, context) => {
const data = snap.data();
const objectID = snap.id;
const client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_ADMIN_KEY);
const index = client.initIndex('ideas');
// Add the data to the algolia index
return index.addObject({
objectID,
...data
});
});
firestore 控制台错误
AlgoliaSearchNetworkError: getaddrinfo ENOTFOUND azrzbvfkpr-2.algolianet.com azrzbvfkpr-2.algolianet.com:443
at ClientRequest.error (/user_code/node_modules/algoliasearch/src/server/builds/node.js:233:14)
at ClientRequest.g (events.js:292:16)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:188:7)
at TLSSocket.socketErrorListener (_http_client.js:324:9)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:188:7)
at connectErrorNT (net.js:1034:8)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)
在我看来,您的 Firebase 项目是免费的 Spark 计划,该计划不支持联网到未完全受 Google 控制的端点。如果您想连接到 Google.
以外的服务,您必须将项目升级为付费计划
要求的行为:
我想创建一个云函数,每当用户在 Firestore 中创建一个新文档时,它就会向 Algolia 索引添加一个新条目。
当前状态
如果用户创建新文档,云功能会成功触发。但是,该函数不会为 Algolia 索引创建新条目。
问题
相反,它会抛出一个我不理解的 firestore 控制台错误。该函数不会抛出任何额外的 ts-lint 错误。
What does the error mean and how can I fix it? Do I handle the document ID correctly or is there an issue with the Algolia configuration?
我的代码:
// importing libaries
import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
import * as algoliasearch from 'algoliasearch';
// setting up environment
const ALGOLIA_APP_ID = 'my-app-id';
const ALGOLIA_ADMIN_KEY = 'my-admin-key';
admin.initializeApp(functions.config().firebase);
// Call onCreate to add data to ALgolia Index
export const ideaIndexAdd = functions.firestore
.document('ideas/{ideaID}')
.onCreate((snap, context) => {
const data = snap.data();
const objectID = snap.id;
const client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_ADMIN_KEY);
const index = client.initIndex('ideas');
// Add the data to the algolia index
return index.addObject({
objectID,
...data
});
});
firestore 控制台错误
AlgoliaSearchNetworkError: getaddrinfo ENOTFOUND azrzbvfkpr-2.algolianet.com azrzbvfkpr-2.algolianet.com:443
at ClientRequest.error (/user_code/node_modules/algoliasearch/src/server/builds/node.js:233:14)
at ClientRequest.g (events.js:292:16)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:188:7)
at TLSSocket.socketErrorListener (_http_client.js:324:9)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:188:7)
at connectErrorNT (net.js:1034:8)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)
在我看来,您的 Firebase 项目是免费的 Spark 计划,该计划不支持联网到未完全受 Google 控制的端点。如果您想连接到 Google.
以外的服务,您必须将项目升级为付费计划