首页 > 解决方案 > 云函数 onCreate 触发函数失败 HTTP 错误:400,请求有错误

问题描述

当我尝试为 Firestore OnCreate 添加触发器时,部署失败并出现 HTTP 错误:400,请求有错误。

如果记录是在不同的集合中创建的,基本上我想写一个新文档。但获取用户ID。这涉及 2 次写入和 1 次读取。不确定这是否有效

但是日志和错误没有详细说明错误是什么

这是我的代码

'use strict';

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

const requestPromise = require('request-promise');

admin.initializeApp();
const firestore = admin.firestore();
const cors = require('cors')({
    origin: true,
});


exports.joinCommunity = functions.region('europe-west2').firestore.document('users/{userId}/community')
    .onCreate((snap, context) => {
        const data = snap.data();
        const communityRef = firestore.doc(`community/${data['cid']}`);
        const user = {
            uid: context.params.userId,
            joined_on: context.timestamp
        }
        return communityRef.collection('members').doc(context.params.userId).set(user, { merge: true });
    });

感谢支持或指针

解决方案:问题是我使用了 Collection 路径而不是文档路径。将.document(users/{userId}/community')更改为.document('users/{userId}/community/{communityId}')修复了错误

另外:还要注意在我的代码中,我在 typescript 中使用了 Javascript 导出方式。不是问题,而是正确的使用方式export const joinCommunity

标签: javascriptnode.jsfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


要定义 Cloud Firestore 触发器,您需要指定一个文档路径。与users/{userId}/community您一起指定收集路径。

users因此,当在集合(使用users/{userId})或community子集合(使用users/{userId}/community/{docId})中创建文档时,您可以触发 CF。


还请查看以下 GitHub 页面https://github.com/firebase/functions-samples/tree/master/typescript-getting-started,特别是导入 Cloud Functions 的不同方式(JavaScript 和 TypeScript 之间) SDK 和 Admin SDK 模块,用于导出 Cloud Functions。


推荐阅读