2016-11-12 2 views
2
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); 
     } 
    } 
    }); 
} 

Это мой способ вставки для добавления данных в коллекции ресторанов. Когда я консоль регистрирую 'check (Meteor.user()) в консоли, я получаю null как вывод. По этой логике вы не сможете добавлять данные в коллекцию, хотя это все еще возможно.создать персональные коллекции для зарегистрированных пользователей

Я также хотел бы сделать коллекцию FavResaurants личным для каждого пользователя. Iv'e попытался проверить, есть ли пользователь, а затем добавить коллекцию в файле 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

Коллекции должны быть определены как на стороне клиента, так и на стороне сервера, за исключением * локальных коллекций *, которые определены только на клиенте и никогда не отображаются на сервер. –

+0

коллекция определяется как на клиенте, так и на сервере –

ответ

1

Отвечая на первый вопрос, разрешить только вошедший в клиентах, чтобы получить доступ к методу, вы должны использовать что-то вроде:

if (!Meteor.userId()) { 
    throw new Meteor.Error('403', 'Forbidden'); 
} 

Теперь я вижу, что вы хотите, коллекция для хранения любимой ресторанов для каждого пользователя на стороне клиента. Но, как я вижу, на каждого клиента будет только один зарегистрированный пользователь, поэтому для каждого пользователя не требуется отдельная коллекция (поскольку коллекция находится на каждом клиенте), вы можете просто ссылаться на пользователя с его идентификатором, а затем принести любимые рестораны пользователя по запросу, как:

FavRestaurants.find({user: Meteor.userId()}); 

Кроме того, как docs предполагают, Meteor.loggingIn это метод, который говорит вам, если какой-то пользователь находится в процессе лесозаготовок в том, что вы делаете это снова. -правлять это, что не имеет смысла.

Вы должны сделать что-то вроде:

if (Meteor.loggingIn()) { 
    // Do your stuff 
} 

Надеется, что это дает вам больше ясности.

0

Создание коллекции для каждого пользователя - плохой подход. Определите коллекцию favRestaurants один раз и добавьте поле владельца в документе ресторана перед вставкой. Создайте метод публикации, чтобы публиковать на стороне клиента только файл favrestaurant.

Еще одна вещь: сначала проверьте свой идентификатор пользователя в методе Метеор, чтобы избежать ненужных процессов.

Regs