我想在我的项目中使用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)
答案 0 :(得分:1)
必须从部署的主要入口(通常为index.ts
)导出函数。目前,您正在从citiesOnCreate
导出adminApp.ts
,目前尚不清楚从主入口点重新导出所有内容。我的猜测是你不是。