Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase自动删除功能在2小时后被要求删除时以秒为单位删除元素_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript Firebase自动删除功能在2小时后被要求删除时以秒为单位删除元素

Javascript Firebase自动删除功能在2小时后被要求删除时以秒为单位删除元素,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我不知道我做错了什么,所以需要额外的眼睛来找出我做错了什么。 我正在尝试一个问题的答案,其中使用并在一段时间后删除一个节点 /root /items LoHgJSFt8hHi2o_hP: { timestamp: 1497911193083, ...some_other_data }, LoHgJSsGGHi2o_fD: { timestamp: 1597911193083 ...some_other_data

我不知道我做错了什么,所以需要额外的眼睛来找出我做错了什么。 我正在尝试一个问题的答案,其中使用并在一段时间后删除一个节点

/root
  /items
    LoHgJSFt8hHi2o_hP: {
      timestamp: 1497911193083,
      ...some_other_data
    },
    LoHgJSsGGHi2o_fD: {
      timestamp: 1597911193083  
      ...some_other_data                  
    }
我的
index.js
看起来像

//index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const { createUser } = require('./auth/onCreate');
const { deleteOldData } = require('./auth/onDeleteOldData');
const serviceAccount = require('./ownerstown-admin.json');
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: 'https://ownexxxxxxxx-c86cf.firebaseio.com'
});
exports.createUser = functions.firestore.document('users/{userId}').onCreate(createUser);
exports.deleteOldData = functions.database.ref('/referralIds/ids/{pushId}').onWrite(deleteOldData);

然后
onDeleteOldData.js

// auth/onDeleteOldData.js
const CUT_OFF_TIME = 2 * 60 * 60 * 1000;
async function deleteOldData(change) {
  console.log('starting nooowwwwwww');
  const ref = change.after.ref.parent;
  console.log('ref', ref);
  const now = Date.now();
  const cutoff = now - CUT_OFF_TIME;
  const oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff);
  const snapshot = await oldItemsQuery.once('value');
  console.log('snapshot', snapshot);
  const updates = {};
  snapshot.forEach(child => {
    updates[child.key] = null;
  });
  return ref.update(updates);
}
module.exports = {
  deleteOldData
};
按一下按钮就可以得到数据

  function createLoginId() {
    const rootRef = Firebase.database.ref();
    const allDetails = rootRef.child('referralIds/ids');
    const timeStamp = Date.now();
    const someId = uuidv4();
    const { origin } = window.location;
    const data = {
      timeStamp,
      someId,
      createrId: id
    };
    const newRef = allDetails.push();
    newRef.set(data);
  }
但我一推数据,它就会在几秒钟内被删除


我做错了什么?

问题来自这样一个事实,即当您向数据库写入数据时,您确实做到了

const timeStamp = Date.now();
//...
const data = {
  timeStamp,
  someId,
  createrId: id
};
这意味着您保存了一个字段
时间戳
,但您的云函数会根据
时间戳
(全部小写)选择要删除的节点

实时数据库中的节点名称区分大小写


顺便说一句,请注意,对于时间戳,您可以使用

const timestamp = firebase.database.ServerValue.TIMESTAMP; 

这是“由Firebase服务器确定的用于自动填充当前时间戳的占位符值”,请参见

我是否正确理解您的代码通过导出/导入被划分为两个文件?是!它分为两个文件。只是为了让我的index.js保持清晰。你能在你的问题中添加两个文件的确切内容,而不仅仅是一些片段吗。函数中的代码工作正常,所以这可能是由于模块化。我已经更新了问题,请告诉我是否可以添加更多信息。对!该死,这就是问题所在,外壳。非常感谢:)