【问题标题】:Error when trying to add timestamps to comment section for social media web app using firebase尝试使用 Firebase 将时间戳添加到社交媒体 Web 应用的评论部分时出错
【发布时间】:2021-09-26 09:21:56
【问题描述】:

在我的社交媒体网络应用程序上尝试为用户的评论系统设置时间戳时出现错误:

"TypeError: firebase__WEBPACK_IMPORTED_MODULE_4__["default"].firestore.FieldValue.serverTimeStamp 不是函数。(在 'firebase__WEBPACK_IMPORTED_MODULE_4__["default"].firestore.FieldValue.serverTimeStamp()','firebase__WEBPACK_IMPORTED_MODULE_4__["default"]。 firestore.FieldValue.serverTimeStamp' 未定义)"

这是错误来自的代码部分:

    const postComment = (event) => {
    event.preventDefault();

    db.collection("posts").doc(postId).collection("comments").add({
        text: comment,
        username: username.displayName,
        timestamp: firebase.firestore.FieldValue.serverTimeStamp(),
    });
    setComment('');
}

如果有人能提供帮助,我将不胜感激。

截图:

![截图] (https://cdn.glitch.com/0f2dd307-0d28-4fe9-9ef9-db84277033dd%2FScreenshot%202021-07-18%20at%2011.36.14.png?v=1626604625641)

【问题讨论】:

    标签: reactjs database firebase firebase-realtime-database timestamp


    【解决方案1】:

    首先,有一个错字。这是serverTimestamp 而不是serverTimeStamp

    另外,firebase.js 文件(在屏幕截图中可见)是您初始化 Firebase 的位置,然后我会说从那里导出时间戳本身,就像在这个 answer 中一样。

    import firebase from "firebase/app"
    import "firebase/firestore"
    
    const firestore = firebase.firestore()
    const serverTimestamp = firebase.firestore.FieldValue.serverTimestamp()
    
    export {firestore, serverTimestamp}
    

    现在您可以轻松地在任何其他组件中直接使用serverTimestamp()

    username 似乎是一个字符串:

    db.collection("posts").doc(postId).collection("comments").add({
      text: comment,
      username, //username.displayName,
                  ^^^^^^^^^^^^^^^^^^^^ remove this
      timestamp: firebase.firestore.FieldValue.serverTimestamp(),
    });
    

    【讨论】:

    • 谢谢我修复了时间戳,但没有收到另一个错误消息:“FirebaseError: Function addDoc() called with invalid data. 不支持的字段值:未定义(在文档帖子/PbWx6MmqM5vHfjXZIAee/中的字段用户名中找到) cmets/Z5DnFTPhLCH7mFAIYc4Y)" 这是截图:![screenshot] (cdn.glitch.com/…)
    • @shange 错误字面意思是用户名字段未定义。您能否分享完整的代码,以便我们查看用户名的来源?
    • ![screenshot] (cdn.glitch.com/…) firebase 数据库截图你可以清楚地看到用户名在那里
    • @shange 在您的代码中...请分享您的代码。 username 初始化在哪里?
    • 好的,我将我的 Post.js 文件上传到了故障,所以你可以看到完整的代码,在这里看到它:glitch.com/edit/#!/post-js
    【解决方案2】:

    它是“serverTimestamp()”,没有大写 S.。但如果这不是问题,请尝试将 serverTimestamp 导入您的 firebase.js 或您正在初始化 firebase 应用程序的地方

    对于用户名字段无效,这是因为在firebase中没有用户名,它是displayName并且它在用户对象内部而不是用户名对象

    const postComment = (event) => {
        event.preventDefault();
    
        db.collection("posts").doc(postId).collection("comments").add({
            text: comment,
            username: user.displayName,
            timestamp: firebase.firestore.FieldValue.serverTimestamp(),
        });
        setComment('');
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多