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()。

有四种可能:

  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}); }); 将 return 一个空光标,因为 this 将没有 userId 属性。 发生这种情况是因为箭头函数没有绑定它自己的 thisargumentssupernew.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;
});