在我的Meteor.publish()
个功能之一中,this.userId
的值为undefined
。我无法致电Meteor.userId()
,因为它是not available inside a publish function。你现在应该如何获得userId
?
答案 0 :(得分:69)
有四种可能性:
没有用户登录。
您正在从服务器调用该方法,因此没有与该调用相关联的用户(除非您从另一个具有用户绑定的函数调用它)它的环境,如另一种方法或订阅功能)。
您甚至没有安装accounts-base个包(或任何加载项)。我只是为了完整性而将其包括在内。
您正在使用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()
会发生什么?
答案 1 :(得分:-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;
});
答案 2 :(得分:-4)
您应该使用Meteor.userId()。