this.userId returns 里面未定义 Meteor.publish
this.userId returns undefined inside Meteor.publish
在我的一个 Meteor.publish()
函数中,this.userId
的值为 undefined
。我不能调用 Meteor.userId()
,因为它是 not available inside a publish function。你现在应该如何获得 userId
?
您应该改用 Meteor.userId()。
有四种可能:
没有用户登录。
您正在从服务器调用该方法,因此没有用户与该调用相关联(除非您是从另一个服务器调用它将用户绑定到其环境的函数,例如另一种方法或订阅函数)。
您甚至没有安装 accounts-base 软件包(或任何附加组件)。我只是为了完整性才包括这个。
您正在使用 ES6 中的箭头函数。
Meteor.publish('invoices', function() { return invoices.find({by: this.userId}); });
将工作得很好,而 Meteor.publish('invoices', () => { return invoices.find({by: this.userId}); });
将 return 一个空光标,因为 this
将没有 userId
属性。
发生这种情况是因为箭头函数没有绑定它自己的 this
、arguments
、super
或 new.target
.
如果肯定不是 (2),当您在对客户端进行方法调用之前立即登录 Meteor.userId()
时会发生什么?
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;
});
在我的一个 Meteor.publish()
函数中,this.userId
的值为 undefined
。我不能调用 Meteor.userId()
,因为它是 not available inside a publish function。你现在应该如何获得 userId
?
您应该改用 Meteor.userId()。
有四种可能:
没有用户登录。
您正在从服务器调用该方法,因此没有用户与该调用相关联(除非您是从另一个服务器调用它将用户绑定到其环境的函数,例如另一种方法或订阅函数)。
您甚至没有安装 accounts-base 软件包(或任何附加组件)。我只是为了完整性才包括这个。
您正在使用 ES6 中的箭头函数。
Meteor.publish('invoices', function() { return invoices.find({by: this.userId}); });
将工作得很好,而Meteor.publish('invoices', () => { return invoices.find({by: this.userId}); });
将 return 一个空光标,因为this
将没有userId
属性。 发生这种情况是因为箭头函数没有绑定它自己的this
、arguments
、super
或new.target
.
如果肯定不是 (2),当您在对客户端进行方法调用之前立即登录 Meteor.userId()
时会发生什么?
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;
});