In einer meiner Meteor.publish()
Funktionen hat this.userId
den Wert undefined
. Ich kann Meteor.userId()
nicht anrufen, weil es not available inside a publish function ist. Wie soll man jetzt userId
bekommen?this.userId gibt undefined in Meteor.publish zurück
Antwort
Es gibt vier Möglichkeiten:
Es gibt keine Benutzer angemeldet
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).
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.
Sie verwenden in ES6 eine Pfeilfunktion.
Meteor.publish('invoices', function() { return invoices.find({by: this.userId}); });
wird problemlos funktionieren, währendMeteor.publish('invoices',() => { return invoices.find({by: this.userId}); });
einen leeren Cursor zurückgibt, weilthis
keineuserId
Eigenschaft haben wird. Dies geschieht, weil eine Pfeilfunktion nicht eigenethis
,arguments
,super
odernew.target
bindet.
Wenn es definitiv nicht (2), was passiert, wenn Sie Meteor.userId()
sofort anmelden, bevor Sie den Methodenaufruf auf dem Client zu machen?
Sie sollten stattdessen Meteor.userId() verwenden.
Es heißt "Error: Meteor.userId kann nur in Methodenaufrufen aufgerufen werden. Verwenden Sie this.userId in Publish-Funktionen." –
Meteor.publish ("mein_kanal", funktion() { var userId = this.userId; myFunction (userId); }); –
this.userId ist undefined –
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;
});
- 1. Collection.update() mit Callback gibt undefined zurück
- 2. this.userId Benutzer nicht angezeigt
- 3. NativeAppEventEmitter gibt undefined zurück
- 4. $ routeParams.param gibt undefined zurück
- 5. "this" gibt zurück undefined
- 6. AJAX gibt undefined zurück
- 7. Accounts.createUser() gibt undefined auf Client zurück
- 8. getJSON Variable gibt undefined zurück
- 9. "var variable" gibt undefined zurück?
- 10. Node.js Funktion Gibt 'undefined' zurück
- 11. Warum JSON.stringify gibt undefined zurück
- 12. jquery .val() gibt undefined zurück
- 13. Firebase-Abfragefunktion gibt undefined zurück
- 14. Karte gibt immer undefined zurück
- 15. Handsontable JSON gibt undefined zurück
- 16. Flowrouter getQueryParam gibt undefined zurück
- 17. Firebase - Object.key gibt undefined zurück
- 18. jQuery data() gibt undefined zurück
- 19. json_encode gibt 200 zurück undefined
- 20. Javascript: firstChild Objekt gibt undefined zurück
- 21. isolateScope() gibt undefined zurück, wenn templateUrl verwendet
- 22. Zugriff auf JSON-Element gibt undefined zurück
- 23. Warum gibt this.prop im Konstruktor undefined zurück
- 24. Get td Wert gibt undefined zurück
- 25. Meteor 1.2.1 Assets.getText gibt undefined zurück
- 26. AngularJS Jasmin isolateScope() gibt undefined zurück
- 27. Ember-Controller getProperties gibt "undefined" zurück
- 28. document.getElementsByClassName(). InnerHTML gibt immer "undefined" zurück
- 29. Warum gibt meine Prototyp-Methode undefined zurück?
- 30. AngularJS Factory Service gibt 'undefined' zurück
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! –
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". –
@ElijahSaounkine Danke! Bit von der ES6. – joshperry