javascript - 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
解决方案
这个错误信息是什么意思?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
推荐阅读
- java - 在 Spring Boot 中使用什么 xml 解析库?
- gradle - Gradle 从键盘输入密码:System.console() return null
- javascript - 如何在 Vue 2 渲染功能中使用插槽?
- c++ - C++/CLI 项目,C++ 共享库的包装器,出现错误
- android - 如何在 Android 上监听 LLMNR 数据包?
- typescript - 使用 javascript 在 BaseClientSideWebPart 的渲染函数中添加代码
- javascript - ngmodel 中的最小值和最大值验证
- php - wp_list_table 中的批量操作
- javascript - JS Jquery 如何选择鼠标点击 Target > parent > .Class
- oracle - Oracle Apex 19.1 中的上传向导限制