2015-01-16 10 views

Antwort

63

Es gibt vier Möglichkeiten:

  1. Es gibt keine Benutzer angemeldet

  2. Sie die Methode vom Server aufrufen, und es wird somit kein Benutzer mit dem Anruf zugeordnet sein (. es sei denn Sie rufen es von einer anderen Funktion an, die einen Benutzer an seine Umgebung gebunden hat, wie eine andere Methode oder eine Subskriptionsfunktion).

  3. Sie haben nicht einmal das accounts-base Paket (oder eines der Add-Ons) installiert. Ich schließe das nur der Vollständigkeit halber mit ein.

  4. Sie verwenden in ES6 eine Pfeilfunktion. Meteor.publish('invoices', function() { return invoices.find({by: this.userId}); }); wird problemlos funktionieren, während Meteor.publish('invoices',() => { return invoices.find({by: this.userId}); }); einen leeren Cursor zurückgibt, weil this keine userId Eigenschaft haben wird. Dies geschieht, weil eine Pfeilfunktion nicht eigene this, arguments, super oder new.target bindet.

Wenn es definitiv nicht (2), was passiert, wenn Sie Meteor.userId() sofort anmelden, bevor Sie den Methodenaufruf auf dem Client zu machen?

+0

Yeah Es war 2. Ich hatte 'var = this.userId' direkt über' Meteor.publish' gesetzt, so dass es vom Server aufgerufen wurde. Das Verschieben in "Meteor.publish" hat es behoben. Vielen Dank! –

+14

Stellen Sie aus Gründen der Vollständigkeit auch sicher, dass Sie keine Pfeilfunktion verwenden, zB 'Meteor.publish ('rechnungen', function() {return invoices.find ({by: this.userId});});' funktioniert gut, während 'Meteor.publish ('rechnungen',() => {return invoices.find ({by: this.userId});});' einen leeren Cursor zurückgibt, da dieser keine userId hat. Weil eine Pfeilfunktion "dies nicht bindet, arguments, super oder new.target". –

+6

@ElijahSaounkine Danke! Bit von der ES6. – joshperry

-4

Sie sollten stattdessen Meteor.userId() verwenden.

+0

Es heißt "Error: Meteor.userId kann nur in Methodenaufrufen aufgerufen werden. Verwenden Sie this.userId in Publish-Funktionen." –

+0

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

+0

this.userId ist undefined –

-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; 
}); 
Verwandte Themen