开发者问题收集

Firebase 错误函数 CollectionReference.doc()

2020-08-17
491

以下 React 项目与 Firebase 连接时出现以下问题代码。单击 Enter 按钮提交消息后,它会从数据库返回错误。(下图)。我创建了集合“rooms”,并尝试使用 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;

**还添加了以下代码,但仍然出现相同的问题 已更改 已更改 2

函数 collectionreference-error firebase 错误

2个回答

what does this error message means? FirebaseError: Function CollectionReference.doc() requires its first argument to be of type non-empty string, but it was: true

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

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


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


如果您想“提交消息”,您需要,例如,在 CollectionReference 上调用 add() 方法。

类似以下内容(我们不知道您要使用的子集合名称,让我们采取'messages'):

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

Renaud Tarnec
2020-08-17
import React, { useState } from "react";
import "./ChatMsg.css";
import db from "./firebase";
import firebase from "firebase";
import { useStateValue } from "./stateProvider";

function ChatMsg({ channelName, channelId }) {
  const [input, setInput] = useState("");
  const [{ user }] = useStateValue();
  const sendMessage = (e) => {
    
    e.preventDefault();
    if (channelId) {
      db.collection("rooms").doc(channelId).collection('messages').add({
        message: input,
        user: user.displayName,
        timestamp: firebase.firestore.FieldValue.serverTimestamp(),
        userimage:user.photoURL
        
       
      });
            
    }
  };

  return (
    <div className="chatInput">
      <form>
        <input
          value={input}
          onChange={(e) => setInput(e.target.value)}
          placeholder={`Message # ${channelName}`}
        />
        <button type="submit" onClick={sendMessage}>
          SEND
        </button>
      </form>
    </div>
  );
}
export default ChatMsg;
kukab
2021-02-08