Firebase 错误函数 CollectionReference.doc()
以下 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;
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
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;