2015-01-16 3 views

ответ

63

Есть четыре варианта:

  1. Там не вошли в систему пользователь

  2. Вы вызова метода с сервера, и, таким образом, не будет ни одного пользователя, связанный с вызовом (. , если вы вызываете его из другой функции, которая будет привязана пользователем к своей среде, например, другому методу или функции подписки).

  3. У вас даже нет пакета accounts-base (или каких-либо надстроек). Я только включаю это для полноты.

  4. Вы используете функцию стрелки в ES6. Meteor.publish('invoices', function() { return invoices.find({by: this.userId}); }); будет работать нормально, в то время как Meteor.publish('invoices',() => { return invoices.find({by: this.userId}); }); вернет пустой курсор, потому что this не будет иметь userId. Это происходит потому, что функция стрелки не связывает свои собственные this, arguments, super или new.target.

Если это определенно не (2), что происходит, когда вы входите Meteor.userId() сразу, прежде чем сделать вызов метода на клиенте?

+0

Да , это было 2. Я установил 'var = this.userId' чуть выше' Meteor.publish', поэтому он вызывался с сервера. Перемещение внутри «Meteor.publish» зафиксировало это. Благодаря! –

+14

Кроме того, для полноты, убедитесь, что вы не используете функцию стрелки, то есть 'Meteor.publish ('invoices', function() {return invoices.find ({by: this.userId});});' будет работать очень хорошо, а 'Meteor.publish ('invoices',() => {return invoices.find ({by: this.userId});});' будет возвращать пустой курсор, потому что у этого не будет userId. Потому что функция стрелки «не связывает свои собственные, аргументы, супер или new.target». –

+6

@ElijahSaounkine Спасибо! Бит ES6. – joshperry

-4

Вместо этого вы должны использовать Meteor.userId().

+0

В нем говорится: «Ошибка: Meteor.userId может быть вызван только вызовом метода. Используйте this.userId в функции публикации». –

+0

Meteor.publish ("my_channel", function() { var userId = this.userId; myFunction (userId); }); –

+0

this.userId не определено –

-1
FIXED: 

import { Meteor } from 'meteor/meteor'; 
import { Roles } from 'meteor/alanning:roles'; 
import _ from 'lodash'; 

import { check } from 'meteor/check'; 


import Corporations from '../corporations'; 

Meteor.publish('corporations.list',() => { 
    const self = this.Meteor; // <-- see here 
    const userId = self.userId(); 
    const user = self.user(); 

    let filters = {}; 

    if (user) { 
    if (!Roles.userIsInRole(userId, ['SuperAdminHolos'])) { // No Está en el Rol SuperAdminHolos 
     filters = { adminsEmails: { $in: _.map(user.emails, 'address') } }; 
    } 
    return Corporations.find(filters); 
    } else return; 
});