import {favRestaurants} from '/lib/collections';
import {Meteor} from 'meteor/meteor';
import {check} from 'meteor/check';
export default function () {
Meteor.methods({
'favRestaurants.create' (id, name, rating, priceLevel, type) {
check(id, String);
check(name, String);
check(rating, Number);
check(priceLevel, Number);
check(type, String);
const createdAt = new Date();
const restaurant = {id, name, rating, priceLevel, type, createdAt};
if(check(Meteor.user()) == null){
console.log('onlye logged in users can data');
}else{
FavRestaurants.insert(restaurant);
}
}
});
}
这是我将数据添加到餐馆馆藏的插入方法。当我控制台登录时,检查(Meteor.user())'在控制台中我得到null作为输出。按照这种逻辑,你不应该能够将数据添加到集合中,尽管这仍然是可能的。
我还希望为每位用户提供个性化的FavResaurants系列。我试图检查是否有用户,然后在客户端的main.js文件中添加一个集合。
Meteor.loggingIn(() => {
console.log('check for user method');
var restId = 0;
if(Meteor.user() != null){
console.log('created new collection for the user');
const FavRestaurants = new Mongo.Collection('favRestaurants' + restId);
}
restId++;
});
我没有使用此方法获得任何输出到控制台,我在流星docs中找到了该方法。代码是在错误的地方吗?任何帮助都很受欢迎。
根据docs,Accounts.ui.config是我应该使用的方法。但我不确定在代码中我应该说出来。到目前为止,此方法的放置导致我的应用程序崩溃。
答案 0 :(得分:1)
回答您的第一个问题,只允许登录的客户端访问某个方法,您应该使用以下内容:
if (!Meteor.userId()) {
throw new Meteor.Error('403', 'Forbidden');
}
现在,我看到你想要一个集合来为客户端的每个用户存储最喜欢的餐馆。但是在我看来,每个客户端只有一个登录用户,所以你不需要为每个用户单独收集(因为集合在每个客户端),你可以引用用户使用它的ID,然后通过以下查询获取用户最喜欢的餐馆:
FavRestaurants.find({user: Meteor.userId()});
此外,正如docs建议的那样,Meteor.loggingIn
是一种方法,可以告诉您某些用户是否正在登录。您正在做的是覆盖它,而不是&#39有意义。
您应该执行以下操作:
if (Meteor.loggingIn()) {
// Do your stuff
}
希望它能让你更清晰。
答案 1 :(得分:0)
为每个用户创建一个集合是一种糟糕的方法。 定义您的favRestaurants集合一次,并在插入之前在餐厅文档中添加所有者字段。 创建一个发布方法,仅向客户端发布userid favrestaurant。
还有一件事,首先在Meteor方法中检查你的用户ID,这样可以避免不必要的处理。
REGS