我正在研究AngularJS和Firebase,我正在玩一个简单的ChatApp,只是为了理解代码.
我的Firebase数据库结构如下:
"chat": {
"messages": {
"chat1": { [ list of messages ] },
"chat2": { [ list of messages ] }
},
"rooms": {
"chat1": {
"users": {
"user1": true,
"user2": true
}
},
"chat2": {
"users": {
"user2": true,
"user3": true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于Firebase保护规则,我无法在用户节点中添加聊天链接,因此我必须使用orderByChild()应用程序启动时的查询来执行Firebase查询以检索用户的聊天室.
使用Firebase比使用以下方法检索所有聊天更简单:
var chatLink = firebase.database().ref('chat/rooms');
chatLink
.orderByChild('users/' + userId)
.equalTo(true)
.once('value', function(chatSnap){
/* Do Some Stuff Here */
});
Run Code Online (Sandbox Code Playgroud)
每件事都运作良好,但我在控制台收到警告:
FIREBASE警告:使用未指定的索引.考虑在/ chat/rooms中添加".indexOn":"users/{userId}"以符合您的安全规则,以获得更好的性能
在网上搜索,我发现对于变量orderByChild()查询,我可以使用.indexOn: .value我的Firebase规则.
我试图添加此规则:
{ …Run Code Online (Sandbox Code Playgroud) javascript angularjs firebase firebase-security firebase-realtime-database
我遇到了一个以前从未发生过的问题:我正在使用 Webpack + Babel 7 编译一个基本的入门浏览器 Web 应用程序(使用 React)。我有三个不同的文件:
withAuth.jsAuth 高阶组件NavBar.js导航栏组件Login.js登录表格如果我在导航栏中导入withAuthHOC 一切正常,但如果我withAuth在 Login.js 文件中导入组件,它会返回undefined
/** withAuth.js */
console.log('withAuth Loaded');
const withAuth = Child => ChildProps => (
<AuthContext.Consumer>
{ authClient => <Child {...ChildProps} authClient={authClient} }
</AuthContext.Consumer>
)
export { withAuth };
/** NavBar.js */
import { withAuth } from 'HOC/Auth';
console.log('NavBar Loaded', withAuth); // <- My HOC
const NavBarComponent = (authClient) => { /* ... My Code ... */ …Run Code Online (Sandbox Code Playgroud)