将Firestore触发器放在何处

时间:2018-06-21 15:22:06

标签: typescript firebase express google-cloud-firestore google-cloud-functions

我想在我的项目中使用Firestore DB触发器,但似乎不起作用。我在路由器上使用Express.js,并且功能以TypeScript编写。

./ apiRouter.ts

import { test } from './controllers/test'

export let apiRouter = express.Router()

apiRouter.route('/test').post(test)

我创建了一个 test()函数,该函数可以在“城市” Firestore集合中正确创建一个新的城市文档:

./控制器/测试

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 个答案:

答案 0 :(得分:1)

必须从部署的主要入口(通常为index.ts)导出函数。目前,您正在从citiesOnCreate导出adminApp.ts,目前尚不清楚从主入口点重新导出所有内容。我的猜测是你不是。