自定义Meteor方法调用客户端是否已登录
有没有一种方法可以自定义Meteor方法,在运行所需的方法之前,Meteor方法将在继续使用该方法之前检查用户是否已登录 例: 我能行自定义Meteor方法调用客户端是否已登录,meteor,Meteor,有没有一种方法可以自定义Meteor方法,在运行所需的方法之前,Meteor方法将在继续使用该方法之前检查用户是否已登录 例: 我能行 this.userId在foo函数中进行检查,但我的观点是,如果在执行所有方法之前登录,则将检查应用于所有方法。这是一个很好的问题。在当前的API中,我认为您无法做到开箱即用。但是,您可以在将所有函数传递给Meteor.methods之前对其进行包装。如果我们这样定义requireLogin函数: var requireLogin=函数(方法){ _.每个(方法
this.userId
在foo函数中进行检查,但我的观点是,如果在执行所有方法之前登录,则将检查应用于所有方法。这是一个很好的问题。在当前的API中,我认为您无法做到开箱即用。但是,您可以在将所有函数传递给Meteor.methods之前对其进行包装。如果我们这样定义requireLogin
函数:
var requireLogin=函数(方法){
_.每个(方法、功能(值、键){
方法[key]=\ wrap(值,函数(){
//如果用户未登录,则无需调用该函数
如果(!this.userId)
抛出新流星。错误(401,‘您必须登录’);
//包装函数始终是第一个参数
var wrappedFunc=参数[0];
//将其他参数转换为数组
var args=arguments.length>1?Array.prototype.slice.call(arguments,1):[];
//使用参数和正确的上下文调用包装函数
返回wrappedFunc.apply(此参数为args);
});
});
返回方法;
};
然后我们可以在调用Meteor.methods之前使用requireLogin
。例如:
流星方法(requireLogin)({
foo:函数(n){
console.log(“foo:+n”);
},
条形图:函数(n){
控制台日志(“条:+n”);
}
}));
如果你想对所有的调用都这样做,你可以通过包装Meteor.methods来进一步改进它。methods本身来使用
requireLogin
,我想我会坚持使用这个.userId一段时间(我正在做原型设计,所以没什么关系),我只是问这个问题,因为我将来会使用它。谢谢你的回答:)。听起来不错。我更新了答案,使其更易于重用。
Meteor.call('foo',bar,function(){}); //client.js
Meteor.methods({
//check the user if logged in here before proceeding to foo or bazz function
'foo':function(bar)
//logic here
'bazz':function(fizz)
//logic here
});