this.userId 在 Meteor.publish 中返回 undefined

Posted

技术标签:

【中文标题】this.userId 在 Meteor.publish 中返回 undefined【英文标题】:this.userId returns undefined inside Meteor.publish 【发布时间】:2015-01-16 19:12:33 【问题描述】:

在我的Meteor.publish() 函数之一中,this.userId 的值为undefined。我不能打电话给Meteor.userId(),因为它是not available inside a publish function。你现在应该如何获得userId

【问题讨论】:

【参考方案1】:

有四种可能:

    没有用户登录。

    您正在从服务器调用该方法,因此不会有与该调用关联的用户(除非您是从另一个具有用户绑定的函数中调用它到它的环境,比如另一个方法或订阅函数)。

    您甚至没有安装 accounts-base 软件包(或任何附加组件)。我只是为了完整起见。

    您在 ES6 中使用箭头函数。 Meteor.publish('invoices', function() return invoices.find(by: this.userId); ); 可以正常工作,而 Meteor.publish('invoices', () => return invoices.find(by: this.userId); ); 将返回一个空游标,因为 this 将没有 userId 属性。 这是因为箭头函数没有绑定自己的thisargumentssupernew.target

如果肯定不是 (2),那么当您在客户端上进行方法调用之前立即登录 Meteor.userId() 会发生什么?

【讨论】:

是的,它是 2。我在 Meteor.publish 上方设置了 var = this.userId,所以它是从服务器调用的。将其移入Meteor.publish 修复了它。谢谢! 另外,为了完整起见,请确保您没有使用箭头功能,即Meteor.publish('invoices', function() return invoices.find(by: this.userId); ); 可以正常工作,而Meteor.publish('invoices', () => return invoices.find(by: this.userId); ); 将返回空光标,因为它没有用户 ID。因为箭头函数“不绑定它自己的 this、arguments、super 或 new.target”。 @ElijahSaounkine 谢谢!受 ES6 影响。 这是粗箭头。谢谢! 干杯这让我发疯了,我是 4。【参考方案2】:
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;
);

【讨论】:

【参考方案3】:

您应该改用 Meteor.userId()。

【讨论】:

它说“错误:Meteor.userId 只能在方法调用中调用。在发布函数中使用 this.userId。” Meteor.publish("my_channel", function() var userId = this.userId; myFunction(userId); ); this.userId 未定义 Meteor.publish() 无权访问Meteor.userId(): docs.meteor.com/#/full/meteor_userid "除发布功能外的任何地方"

以上是关于this.userId 在 Meteor.publish 中返回 undefined的主要内容,如果未能解决你的问题,请参考以下文章

发布函数中的 Meteor.userId()

C#-DataGridView设置列不显示

三层架构!注册登录

[leetcode]355. Design Twitter设计实现一个微博系统

Mybatis中插入记录后获取该条记录ID

ES6 箭头函数正在改变 Meteor.publish 中 this 的范围 [重复]