首页 > 解决方案 > Firebase 错误函数 CollectionReference.doc()

问题描述

以下与 firebase 连接的项目具有以下问题代码。单击输入按钮提交消息后,它会从数据库中返回错误。(下图)。我创建了集合“房间”,并尝试使用 db.collection("rooms").doc(channelId).collection({ })第 17 行进行访问,这会从 firebase 中恢复错误。

这个错误信息是什么意思?FirebaseError:函数 CollectionReference.doc() 要求其第一个参数为非空字符串类型,但它是:true

我删除了 firebase.ps1 文件并记录了回来。创建了一个新的 db.collection 仍然相同。

import React, { useState } from "react";
import "./ChatInput.css";
import db from "./firebase";
import { useStateValue } from "./StateProvider";
import firebase from "firebase";
import { Button } from "@material-ui/core";

function ChatInput({ channelName, channelId }) {

    const [input, setInput] = useState("");
    const [{ user }] = useStateValue();


    const sendMessage = (e) => {
        e.preventDefault();

        if (channelId) {
              db.collection("rooms").doc(channelId).collection({
                message: input,
                timestamp: firebase.firestore.FieldValue.serverTimestamp,
                user: user.displayName,
                userImage: user.photoURL,
             });
         }

         setInput("");

    };


    return (
        <div className="chatInput">

            <form>
                
                <input
                value={input}
                onChange={(e) => setInput(e.target.value)}
                placeholder={`Message #${channelName?.toLowerCase()}`} />

                    <Button type="submit" onClick={sendMessage}>
                        SEND</Button>

            </form>

        </div>
    );
}

export default ChatInput;

**还添加了以下代码,但仍然遇到相同的问题 Changes made changes made 2

函数集合 引用错误 firebase 错误

标签: javascriptreactjsfirebasegoogle-cloud-firestore

解决方案


这个错误信息是什么意思?FirebaseError:函数 CollectionReference.doc() 要求其第一个参数为非空字符串类型,但它是:true

这意味着您需要传递一个字符串作为doc()方法的参数。

您正在传递channelId给该doc()方法,它似乎是一个带有 value 的布尔值true。您需要传递一个代表 Firestore 文档 ID 的字符串。我想是的channelName,不是吗?


此外,您的代码中还有另一个问题:您正在将一个 JavaScript 对象传递给该collection()方法。


如果你想“提交消息”,你需要,例如,add()调用CollectionReference.

类似于以下内容(我们不知道您要使用的子集合名称,让我们使用“消息”):

db.collection("rooms").doc(channelName).collection('messages')
  .add({
       message: input,
       timestamp: firebase.firestore.FieldValue.serverTimestamp,
       user: user.displayName,
       userImage: user.photoURL,
  }); 

我建议你看看文档:https ://firebase.google.com/docs/firestore/manage-data/add-data


推荐阅读