在哪里放置 Firestore 触发器
Posted
技术标签:
【中文标题】在哪里放置 Firestore 触发器【英文标题】:where to put Firestore trigger 【发布时间】:2018-12-01 00:00:24 【问题描述】:我想在我的项目中使用 Firestore DB 触发器,但它似乎不起作用。我使用 Express.js 作为路由器,函数是用 TypeScript 编写的。
./apiRouter.ts
import test from './controllers/test'
export let apiRouter = express.Router()
apiRouter.route('/test').post(test)
我创建了一个 test() 函数,它可以正确地在“城市”Firestore 集合中创建一个新的城市文档:
./controllers/test
import adminApp from '../adminApp'
export const test = async (request, response) =>
try
const res = await adminApp.firestore().collection('cities')
.doc('LA')
.set(
name: "Los Angeles",
state: "CA",
country: "USA"
)
response.status(200).send(res)
catch (e)
// ...
然后我初始化 FB 管理应用程序并像这样编写“citiesOnCreate”触发器:
./adminApp.ts
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
...
export const adminApp = admin.initializeApp(
credential: admin.credential.cert(serviceAccountKeyCasted),
databaseURL: databaseUrl
)
export const citiesOnCreate = functions.firestore
.document('cities/cityId')
.onCreate((change, context) =>
console.log('citiesOnCreate: ', change, context)
);
因此,当我将一些数据发布到该“/test”API 端点时,它会在 Firestore 中创建新文档,但我无法让触发器运行。
编辑:我的 ./index.ts 看起来像这样:
import * as functions from 'firebase-functions'
import apiRouter from './apiRouter'
export citiesOnCreate from './adminApp'
export const api = functions.https.onRequest(apiRouter)
【问题讨论】:
【参考方案1】:您的函数必须从部署的主入口点导出,通常是index.ts
。现在,您正在从adminApp.ts
导出citiesOnCreate
,并且从主入口点重新导出它并不清楚。我猜你不是。
【讨论】:
抱歉,我已在问题中添加了有关我的“index.ts”文件的附加信息。我想我正确地导出了它,还是我错过了什么? 好的,我还期待 console.log() 在我的本地主机上提供功能时出现在终端中。当我将功能部署到实时系统时,我可以在 Firebase 的“功能/日志”选项卡中看到日志,所以现在看起来可以正常工作了,谢谢以上是关于在哪里放置 Firestore 触发器的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cloud Firestore 触发器功能时如何获取 dataID?
从 Cloud Functions for Firebase 中的 Firestore 触发器获取用户 ID?