在我的Meteor.publish()
函數之一中,this.userId
的值爲undefined
。我不能撥打Meteor.userId()
,因爲它是not available inside a publish function。你現在應該怎麼得到userId
?this.userId在Meteor.publish內返回undefined
回答
有四種可能性:
沒有用戶登錄
你從服務器調用該方法,因此也就沒有與呼叫相關的用戶(。 除非你從另一個函數中調用它,這個函數將有一個用戶綁定到它的環境,就像另一個方法或訂閱函數一樣)。
您甚至沒有安裝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()
你讓客戶端上的方法調用之前發生了什麼?
您應該使用Meteor.userId()來代替。
它說「錯誤:Meteor.userId只能在方法調用中調用,在發佈函數中使用this.userId」。 –
Meteor.publish(「my_channel」,function(){ var userId = this.userId; myFunction(userId); }); –
this.userId is 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. 返回函數返回'undefined'
- 2. 訪問this.userId從內Meteor.SetTimeout
- 3. AJAX返回undefined
- 4. gui.Window.open()返回undefined
- 5. .filter()返回undefined
- 6. Ajax返回undefined
- 7. CONSOLE.LOG返回undefined
- 8. getElementsByClassName返回undefined
- 9. parseFromString返回'undefined'
- 10. Array.prototype.map返回undefined
- 11. dijit.byId返回undefined
- 12. chrome.alarms返回undefined
- 13. parent.window.location.pathname返回undefined?
- 14. sessionAsSigner返回「undefined」
- 15. $ .html()返回undefined?
- 16. cfajaxproxy返回undefined
- 17. event.wheelDelta返回undefined
- 18. .html()返回undefined
- 19. Console.log返回'undefined'
- 20. getJSON返回undefined
- 21. parseInt返回undefined
- 22. sessionStorage返回undefined
- 23. song.currentTime返回undefined
- 24. 返回undefined JS
- 25. lookForAt返回undefined
- 26. Meteor.methods返回undefined
- 27. $ routeParams.param返回undefined
- 28. $ route.current返回undefined?
- 29. json_encode返回undefined
- 30. this.props.firstCard返回undefined
Yeah ,它是2.我在'Meteor.publish'上面設置了'var = this.userId',所以它從服務器被調用。把它移到Meteor.publish裏面。謝謝! –
此外,爲了完整性,請確保您沒有使用箭頭函數,即'Meteor.publish('invoices',function(){return invoices.find({by:this.userId});});' ('invoices',()=> {return invoices.find({by:this.userId});});'將返回空遊標,因爲它沒有userId。因爲一個箭頭函數「不綁定它自己的this,arguments,super或new.target」。 –
@ElijahSaounkine謝謝!位由ES6。 – joshperry