TypeError:this.path.replace不是新的FirestoreDelete的函数

时间:2019-12-19 12:40:00

标签: javascript java android google-cloud-firestore google-cloud-functions

尝试从应用中删除调用函数的用户数据。

'use strict';
const functions = require('firebase-functions');
const firebase_tools = require('firebase-tools');
const admin = require('firebase-admin');
const serviceAccount = require('./myapp.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://myapp.firebaseio.com"
});
let db = admin.firestore(); 

exports.mintAdminToken = functions.https.onCall((data, context) => {
  const uid = data.uid;

  return admin
    .auth()
    .createCustomToken(uid, { admin: true })
    .then(function(token) {
      return { token: token };
    });
});

exports.recursiveDelete = functions
  .runWith({
    timeoutSeconds: 540,
    memory: '1GB'
  })
  .https.onCall((data, context) => {

    if (!(context.auth && context.auth.token )) {
      throw new functions.https.HttpsError(
        'permission-denied',
        'Must be an administrative user to initiate delete.'
      );
    }
    let path = data.path;
    console.log(
      `User ${context.auth.uid} has requested to delete path ${path}`
    );

    return firebase_tools.firestore
      .delete(path, {
        project: process.env.GCLOUD_PROJECT,
        recursive: true,
        yes: true,
        token: functions.config().fb.token
      })
      .then(() => {
        return {
          path: path
        };
      });
  });

我通过了这样的路径:

    Map<String, Object> data = new HashMap<>();
    data.put("path", "./users/rnAjpK4LLSMMlENZqe4l3F2");

结果:

Function execution took 540003 ms, finished with status: 'timeout'

问题可能出在路径上。如果我更改此行:

let path = admin.firestore().doc('users/' + context.auth.uid);

出现错误

  

未处理的错误TypeError:this.path.replace不是新FirestoreDelete的函数

“路径”有问题吗? 那么删除的正确路径是什么?

我使用的是这个示例for-in iteration proposal,但是这里没什么

已更新:

与 字符串路径=“ ./users/rnAjpK4LLSMMlENAgrZqe4l3F2”; 要么 字符串数据=“ ./users/rnAjpK4LLSMMlENAgrZqe4l3F2”;

错误

Unhandled error { FirebaseError: Must specify a path. at Object.reject (/srv/node_modules/firebase-tools/lib/utils.js:82:27)

3 个答案:

答案 0 :(得分:0)

据我阅读code of the delete function所看到的,您传入的path必须是要删除的集合或文档的单个字符串值。然后,该功能将删除该集合或文档下的所有数据。

答案 1 :(得分:0)

解决方案

   const id = context.auth.uid;
   const path = `users/${id}`;

答案 2 :(得分:0)

我不小心发送了整个对象。如果您遇到这个问题,请仔细检查您是否犯了同样的错误。