javascript - Meteor.users access with string argument -


i trying list members of project team, stored userids in projectmembers array. use {{#each projectmember}} iterate on current members display either username (if exists) or email address. unfortunately, error haven't been able debug.

the console logs show appropriate userid getting sent string element meteor.users.findone(), there error showing on console.

string {0: "o", 1: "o", 2: "t", 3: "w", 4: "4", 5: "t", 6: "i", 7: "5", 8: "j", 9: "u", 10: "l", 11: "5", 12: "v", 13: "b", 14: "f", 15: "x", 16: "r", length: 17} createproject.js?5f1e645071dc1f451f671ec1d93aa9051ebadc0b:26 exception deps recompute function: typeerror: object 0 has no method 'substr' @ http://localhost:3000/packages/minimongo.js?4ee0ab879b747ffce53b84d2eb80d456d2dcca6d:1370:13 @ function._.each._.foreach (http://localhost:3000/packages/underscore.js?0a80a8623e1b40b5df5a05582f288ddd586eaa18:159:22) @ compiledocumentselector (http://localhost:3000/packages/minimongo.js?4ee0ab879b747ffce53b84d2eb80d456d2dcca6d:1369:5) @ _.extend._compileselector (http://localhost:3000/packages/minimongo.js?4ee0ab879b747ffce53b84d2eb80d456d2dcca6d:1346:12) @ new minimongo.matcher (http://localhost:3000/packages/minimongo.js?4ee0ab879b747ffce53b84d2eb80d456d2dcca6d:1289:27) @ new localcollection.cursor (http://localhost:3000/packages/minimongo.js?4ee0ab879b747ffce53b84d2eb80d456d2dcca6d:142:20) @ localcollection.find (http://localhost:3000/packages/minimongo.js?4ee0ab879b747ffce53b84d2eb80d456d2dcca6d:125:10) @ localcollection.findone (http://localhost:3000/packages/minimongo.js?4ee0ab879b747ffce53b84d2eb80d456d2dcca6d:188:15) @ _.extend.findone (http://localhost:3000/packages/mongo-livedata.js?cf17a2975aa7445f0db2377c2af07e5efc240958:320:29) @ string.template.manageproject.helpers.email (http://localhost:3000/client/helpers/createproject.js?5f1e645071dc1f451f671ec1d93aa9051ebadc0b:27:29) debug.js:41 

what unusual can run meteor.users.findone("ootw4ti5jul5vbfxr") on console , expected value returned.

relevant template code:

    {{#each projectmembers}}     <li class="userrow">         <div class="linewrapper">         <div class="destroyuser"></div>         <div class="displayuser">              <div class="usernames">{{email}}</div>         </div>         <div class="projectpermissions">             <div class="admin"><button type="button" class="btn btn-add btn-success btn-sm"><span title="administrator" class="glyphicon glyphicon-cog {{isadmin}}"> admin</span></button></div>             <div class="edit"><button type="button" class="btn btn-add btn-success btn-sm"><span title="edit" class="glyphicon glyphicon-pencil {{canedit}}"> edit</span></button></div>             <div class="download"><button type="button" class="btn btn-add btn-success btn-sm"><span title="download" class="glyphicon glyphicon-download-alt {{candownload}}"> download</span></button></div>             <div class="print"><button type="button" class="btn btn-add btn-success btn-sm"><span title="print" class="glyphicon glyphicon-print {{canprint}}"> print</span></button></div>             <div class="view"><button type="button" class="btn btn-add btn-success btn-sm"><span title="view" class="glyphicon glyphicon-eye-open {{canview}}"> view</span></button></div>         </div>         </div>     </li> {{/each}} 

and associated helper functions (with emphasis (**) added tosses error logged in console):

template.manageproject.helpers ({ projectmembers: function() {     return this.projectmembers; }, ispublic: function() {     if (this.publicproject)     {         return "active";     }     else         return ""; }, isnotpublic: function() {     if (this.publicproject)         return "";     else         return "active"; }, debug: function() {     return true; }, email: function () {     var temp=this;     console.log(temp);     **var userdude=meteor.users.findone(temp);**     console.log(userdude);     if (userdude)     {         console.log("found it");         if (!userdude.username)         {             return userdude.emails[0].address;         }         else {             return  userdude.username;         }     }     else{         console.log("no dice");     }     return null; }, entermanageproject: function() {     //assumes called session variable currentproject set current project id.       //if set null, create new project.     var currproject = session.get("currentproject");     if ((currproject === null) || (currproject === undefined))             {             newproject=projects.insert(                 {                 projectname: "new project",                 publicproject: true,                 projectmembers: [meteor.userid()],                 projectadministrators: [meteor.userid()],                 projecteditors: [meteor.userid()],                 projectdownload: [meteor.userid()],                 projectprint: [meteor.userid()],                 projectview: [meteor.userid()]                 });         currproject=newproject;         session.set("currentproject",currproject);         }     return projects.findone(currproject); } }) 

the meteor documentation shows passing string meteor.users.findone() should legit, insight on i'm doing wrong appreciated.

thanks in advance.

i'm having similar problem user lookup. found wrapping meteor.users.findone call in try..catch block gives me temp solution. in case seems called again later. i'm still digging try , find complete solution, in case manifests when i'm not logged-in.

update:

you want temp patch:

try{   var userdude=meteor.users.findone(temp); } catch(e){   console.log(e); } 

update:

i've started reading subscription model meteor. i've found couple of methods might of use you. there method check if accounts services configured. think might work you:

if(accounts.loginservicesconfigured()){   var userdude=meteor.users.findone(temp); } 

update:

as per parties example i've created on server:

meteor.publish("directory", function () {   return meteor.users.find({}, {fields: {emails: 1, profile: 1}}); }); 

in client, i'm subscribing service:

var directorysubscription = meteor.subscribe("directory"); 

then i'm checking if subscription ready:

if(directorysubcription.ready()){   var userdude=meteor.users.findone(temp); } 

Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

javascript - Using Windows Media Player as video fallback for video tag -

c# - Unity IoC Lifetime per HttpRequest for UserStore -