2016-02-12 2 views
1

Im créer une application de messagerie instantanée et je me demande comment je peux accéder à l'avatar des utilisateurs à partir du dossier public et nom d'utilisateur de la collection. Je voudrais que le nom d'utilisateur et l'avatar apparaissent à côté du message des utilisateurs. Je continue à obtenir une image brisée et [object Object]. Object Object, devrait être nom d'utilisateur avec l'avatar. Check out this image.Meteor: Comment puis-je publier et abonner un avatar utilisateur à partir du dossier public?

Modèle

<template name="chat_message"> 
    <div class = "container"> 
     <div class = "row"> 
      <img src="/{{profile.avatar}}" class="avatar_img"> 
      {{username}} said: {{text}} 
     </div> 
    </div> 
    <br> 
</template> 

côté client

Meteor.subscribe("userData"); 
Meteor.subscribe("users"); 

Template.chat_message.helpers ({ 
    username: function() { 
     var userId = this.userId; 
     var user = Meteor.users.findOne(userId); 
     var username = user && user.profile && user.profile.username; 
     var avatar = user && user.profile && user.profile.avatar; 

     return { 
     username: username, 
     avatar: avatar 
     } 
    }, 
    }); 

    Template.chat_page.helpers({ 
    messages:function(){ 
     var chat = Chats.findOne({_id:Session.get("chatId")}); 
     return chat && chat.messages; 
    }, 
    other_user:function(){ 
     return "" 
    }, 

    }); 

côté serveur

Meteor.publish("userData", function(){ 
    return Meteor.users.find({_id: this.userId}); 
}); 

Meteor.publish("users", function(){ 
    return Meteor.users.find({ "status.online": true }) 
}); 

    Meteor.methods({ 
    sendMessage: function (chat) { 
     Chats.insert({ 
     chat: chat, 
     createdAt: new Date(), 
     username: Meteor.user().profile.username, 
     avatar: Meteor.user().profile.avatar, 
     }); 
    }, 
    }); 
+0

Utilisez-vous un package pour la création/la consolidation d'avatars? Si oui, lequel? – MasterAM

+0

Non, je n'ai utilisé aucun paquet. Serait-il préférable d'en utiliser un? – Jessica

+0

C'est à vous de décider, mais il y a plusieurs problèmes avec votre code. Certains d'entre eux sont adressés par la réponse (bien que je ne recommanderais pas tous les conseils donnés là). Veuillez partager un exemple de ce à quoi ressemble un objet utilisateur, et en particulier son profil. Réfléchissez bien à vos données: que voulez-vous stocker dans chaque message de discussion et dans chaque conversation? Pour un, si le nom d'utilisateur et l'avatar sont stockés dans le message de chat, vous n'avez pas besoin de la collection 'users' pour l'obtenir. – MasterAM

Répondre

0

Ce code j'ai utilisé pour une tâche similaire:

serveur:

Meteor.publish("chats", function(){ 

    return Chats.find({$or:[ 
       {user1Id:this.userId}, 
       {user2Id:this.userId} 
       ]}); 
    }); 

Meteor.publish("users", function(){ 

    return Meteor.users.find(); 

    }); 

Méthodes:

Meteor.methods({ 

    addChat:function(otherUserId){ 
     var currentUser = this.userId; 
     var otherUser = otherUserId; 
     var id = Chats.insert({user1Id:currentUser, user2Id:otherUser}); 
     return id; 
    }, //end of method for adding chat items  


    addMessage:function(chat){ 
     Chats.update(chat._id, chat); 
    },//end of method for adding a message 

}); 

Helpers:

Template.chat_page.helpers({ 
    messages:function(){ 
     var chat = Chats.findOne({_id:Session.get("chatId")}); 
     return chat.messages; 
    }, 
    other_user:function(){ 
     return "" 
    }, 

    }) 


    Template.chat_message.helpers({ 
    user:function(){ 
    var currentId = Session.get('chatId'); 
    console.log(Chats.findOne({_id:Session.get("chatId")})); 
    console.log(Meteor.user()._id); 
    return Meteor.user()._id; 
     }, 
    }); 
+0

Merci, j'ai essayé mais ça n'a pas marché. Devrais-je apporter des modifications à la méthode aussi? – Jessica

+0

Je suis en train d'éditer la réponse, essayez de copier la façon dont j'ai implémenté ceci. – StefanL19

+0

Merci, j'ai réussi à le faire fonctionner. – Jessica

1

Je résolus comme ceci: Vous pouvez insérer le nom d'utilisateur et votre avatar dans le tableau msg comme ça ...

Et le t emplate .....

<template name="chat_message"> 
    <img src="/{{avatar}}" alt="user" class="chat-img" /> 
    {{user}}: {{text}} 
    <br /> 
</template>