Meteor / React - 显示所有用户(将所有用户发布到客户端)

时间:2016-06-02 09:35:51

标签: meteor

我正在使用Meteor / React,我正在尝试显示系统中的所有用户:

我有:/imports/api/users.js

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';     

if (Meteor.isServer) {
  // This code only runs on the server
  // Only publish tasks that are public or belong to the current user
  Meteor.publish('allUsers', function () {
    return Meteor.users.find({}, {fields: {"emails.address": 1}});  
  });    
}

和/imports/ui/App.jsx

import React, { Component, PropTypes } from 'react';
import ReactDOM from 'react-dom';
import { Meteor } from 'meteor/meteor';
import { createContainer } from 'meteor/react-meteor-data';
class App extends Component {

    constructor() {
        super();
        this.state = {
            subscription: {
                users: Meteor.subscribe('allUsers')
            }
        }
    }

    componentWillUnmount() {
        this.state.subscription.users.stop();
    }


    render() {
        let users = this.props.users;
        console.log(users);
        return (<div>
            <h1>GoArc User Manager</h1>

            <div>
                {users.map((user)=>{
                    if ('emails' in user ) {
                        email = user.emails[0].address;
                    } else {
                        email = '?'
                    }
                    return <div key={user._id}>{user._id} - {email}</div>
                })
                }
            </div>
        </div>)
    }
}


export default createContainer(() => {
  return {
    users: Meteor.users.find({ }).fetch(),
  };
}, App);

但它仍然只显示当前的登录用户。

如果我设置了autopublish / insecure,那么代码工作正常。

使用Meteor / React将所有用户发布到客户端的正确方法是什么?

另一个相关问题是即使我设置了autopublish / insecure仍然只有当前用户才会出现email.address字段 - 即使我发布了这个字段:

return Meteor.users.find({}, {fields: {"emails.address": 1}}); 

1 个答案:

答案 0 :(得分:0)

代码是正确的,但我忘了添加import '../imports/api/users.js'; 在/server/main.js