2017-10-19 1 views
0

meteorJS에 등록 된 모든 사용자의 데이터를 가져오고 싶습니다. 문서의 meteorJS 및 stackOverflow에 따르면 렌더 함수에서 일부 메서드를 시도했습니다 (결과는 커밋 된 것으로 표시됨). db.users.find의meteor Js에 등록 된 모든 사용자의 데이터를 가져옵니다

결과()

{ "_id" : "uFdKrgSyeBr6msxsH", "createdAt" : ISODate("2017-10-19T12:35:26.930Z"), "services" : { "password" : { "bcrypt" : "$2a$10$.LP2ftnNFDNx1gB7ouaMZ.OwXWLk89iDL6qjOuc.CVebtR/ziiv1K" }, "resume" : { "loginTokens" : [ ] } }, "username" : "AAA" } 
{ "_id" : "sJXS2YZ3vENHK2TYT", "createdAt" : ISODate("2017-10-19T12:35:46.266Z"), "services" : { "password" : { "bcrypt" : "$2a$10$TMbeew0aQ/L71YCHjSMoveyf3Kj7Vf0uNnZc7D0OnVtze.ZcuuoE6" }, "resume" : { "loginTokens" : [ { "when" : ISODate("2017-10-19T12:35:46.274Z"), "hashedToken" : "4WpMPUrqydYyKSStCWayBVubNKhgUiLmRio7N1902mg=" } ] } }, "username" : "BBB" } 

https://github.com/LeMueller/meteor_react_chatroom

어쩌면 누군가가 문제를 알고 : 나는 실제로 db.users 2 개 사용자 계정이있을 때 난 단지는 하늘의 배열 또는 subscribtion 객체를받을 수 있습니다. 미리 감사드립니다. 클라이언트에서

코드 : 당신은 구성 요소의 렌더링 방법 내에서 'ALLUSERS'에 가입되어

import { Meteor } from 'meteor/meteor'; 

Meteor.startup(() => { 
    Meteor.publish('allUsers', function(){ 
    return Meteor.users.find({},{ 
     fields:{ 
      _id:1, 
      username:1 
     } 
    }); 
    }); 
}); 

답변

1

을 : 서버

import React, {Component} from 'react'; 
import ReactDOM from 'react-dom'; 
import { Meteor } from 'meteor/meteor'; 
import {DialogServer} from './dialogServer.js'; 

export default class SendArea extends Component{ 

    constructor(props){ 
     super(props); 
    } 

    handleSubmit(event) { 
     event.preventDefault(); 

     // Find the text field via the React ref 
     const text = ReactDOM.findDOMNode(this.refs.textInput).value.trim(); 

     if(Meteor.userId()) 

     DialogServer.insert({ 
      text: text, 
      owner: Meteor.userId(),   // _id of logged in user 
      username: Meteor.user().username, // username of logged in user 
      createdAt: new Date(), // current time 
     }); 

     // Clear form 
     ReactDOM.findDOMNode(this.refs.textInput).value = ''; 
    } 

    render(){ 
     let allUsersDate=Meteor.subscribe('allUsers'); //{subscriptionId: "4nHErSSjJLJesWJcq", stop: ƒ, ready: ƒ} 
     let allUsersD = Meteor.users.find({}).fetch(); //Array(0) 
     return(
      <div> 
      <form className="new_message" onSubmit={this.handleSubmit.bind(this)}> 
       <input type='text' ref="textInput" placeholder="message to send"/> 
       <button onClick={this.handleSubmit.bind(this)}>send</button> 
      </form> 
      </div> 
     ) 
    } 
} 

코드는

let allUsersDate=Meteor.subscribe('allUsers'); //{subscriptionId: "4nHErSSjJLJesWJcq", stop: ƒ, ready: ƒ} 
let allUsersD = Meteor.users.find({}).fetch(); //Array(0) 

이것은 아니다 올바른 방법과 몇 가지 문제를 유발합니다. 먼저 을 통해 데이터를 사용할 수 있으려면 ready 인 경우 구독을 확인해야합니다.

let allUsersDate=Meteor.subscribe('allUsers'); 
if (allUsersDate.ready()) { 
    let allUsersD = Meteor.users.find({}).fetch(); // will return all users 
} 

하지만 위와 같이, 당신의 render 방법은 가입이 준비되기도 전에 다시 호출 될 수있다 할 것입니다 경우에도 마찬가지입니다. render 메서드는 데이터 처리가 아닌 렌더링에만 사용됩니다.

createContainer에서 create a container for Meteor subscriptions까지 사용 방법을 확인하고이 데이터를 구성 요소에 전달해야합니다. 또한 필요한 데이터가 소품을 통해 주입되므로 구성 요소를 재사용 및 테스트하기가 쉽습니다.

+0

시도해 보겠습니다. 고마워. –

관련 문제