【问题标题】:How to access firestore.Timestamp from Firebase Cloud Function如何从 Firebase Cloud Function 访问 firestore.Timestamp
【发布时间】:2018-10-01 04:46:04
【问题描述】:

我们正在将 Firestore 日期对象转换为新的 Timestamp Objects

我们通过导入 firestore 在前端成功地做到了这一点

import { firestore } from 'firebase';

然后用 firestore.Timestamp 替换所有 Date 对象类型

  startDate: firestore.Timestamp;

问题是我似乎找不到在节点中访问时间戳的方法。

我已尝试同时记录 admin 和 functions 对象,但似乎根本找不到时间戳

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
...
console.log(functions)
console.log(admin)

这些是我尝试过的,它们都返回了“未定义的时间戳不存在”

import * as firebase from 'firebase';
...
firebase.firestore.Timestamp.now()

const firebase = require('firebase')   
...
firebase.firestore.Timestamp.now()

import * as admin from 'firebase-admin';
...
admin.firestore.Timestamp.now()

这是我的 package.json 依赖项

"dependencies": {
    "@sendgrid/mail": "^6.2.1",
    "@types/node-fetch": "^1.6.8",
    "chai": "^4.1.2",
    "chai-as-promised": "^7.1.1",
    "cors": "^2.8.4",
    "encodeurl": "^1.0.2",
    "fetch": "^1.1.0",
    "firebase": "^4.13.0",
    "firebase-admin": "^5.12.0",
    "firebase-functions": "^1.0.1",
    "generator-karma": "^2.0.0",
    "google-distance": "^1.0.1",
    "mailgun-js": "^0.13.1",
    "moment": "^2.22.1",
    "node-fetch": "^2.1.2",
    "request": "^2.85.0",
    "sinon": "^4.0.1",
    "typescript": "^2.8.3"
},
"private": true,
"devDependencies": {
    "@angular/cli": "^1.7.4",
    "@types/cors": "^2.8.3",
    "@types/jasmine": "^2.6.6",
    "ts-loader": "^3.5.0",
    "webpack-node-externals": "^1.7.2"
}

【问题讨论】:

  • 根据this question 应该是admin.firestore.FieldValue.serverTimestamp()。如果这对您不起作用,请更新您的问题以显示您尝试过的确切代码。

标签: node.js typescript firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

随着 Firebase Functions V2.0 的发布,他们似乎在 Firebase Admin SDK 包中添加了时间戳支持。

查看官方文档here

import { firestore } from 'firebase-admin';
...
const now = firestore.Timestamp.now()

【讨论】:

  • 这不是真正的“firebase 函数”npm 包。这是 Firebase Admin SDK,您当然可以在 Cloud Functions for Firebase 或任何节点进程中使用它。
  • 谢谢@DougStevenson。很高兴看到您总是乐于提供帮助。即使是 4 个月大的问题
【解决方案2】:

在这个非常时刻,时间戳在 node.js 的 @google-cloud/firestore npm 模块的最新版本中根本不可用。您还可以看到它没有包含在API docs 中。可能会在@google-cloud/firestore的下一个版本中添加。

【讨论】:

  • 谢谢@Doug Stevenson。知道这可能是什么时候吗?我希望 FB 在我的控制台中记录一条大红色消息,说“请在启用新行为时审核 Date 的所有现有用法。在未来的版本中,该行为将更改为新行为,因此如果您不遵循这些步骤,您的应用程序可能会中断。”,该云/firestore 也希望实施这些更改。
  • 抱歉,我并不真正了解该 SDK 的作者如何发布他们的版本。
  • firebase 客户端团队没有与管理团队沟通真是太疯狂了。我有与@MatthewMullin 完全相同的问题。大红色控制台警告,然后您转换所有内容只是为了发现管理 SDK 仍然使用 Date,因此所有代码共享都消失了。期待下一个版本:)
  • 谷歌这边的大失败......我刚刚向他们打开了一个错误报告。
【解决方案3】:

我遇到了同样的问题,因此在这里为 Firebase Firestore 时间戳创建了一个基本节点模块 https://www.npmjs.com/package/firebase-firestore-timestamp

来自https://www.gstatic.com/firebasejs/4.13.0/firebase-firestore.js的基本代码端口

【讨论】:

    【解决方案4】:

    由于您需要在云函数中使用它,因此您正在使用通过 snap 参数携带时间戳的触发器(onCreate、onUpdate...等)。您可以按如下方式使用它。 (它对我有用)

    exports.newUserCreated = functions.firestore.document('users/{userId}').onCreate(async (snap, context) => {
    firestore.collection(`users/${userID}/lists`).add({
        'created_time': snap.updateTime,
        'name':'new list name',
    }).then(documentReference => {
        console.log("list created");
        return null;
      }).catch(error => {
        console.error('Error creating list', error);
        process.exit(1);
    });
    

    });

    【讨论】:

      【解决方案5】:

      这在节点上对我有用:

      firebase = require('firebase')
      firebase.firestore.Timestamp
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-28
        • 2018-06-22
        • 2022-01-04
        • 2018-01-24
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        相关资源
        最近更新 更多