2016-12-13 4 views
0

Я играю в Meteor и обнаружил, что он не работает должным образом. Я должен видеть коллекцию как на стороне сервера, так и на стороне клиента. Однако, похоже, я не вижу коллекцию на стороне клиента.Коллекция MongoDB не распознается на стороне клиента

В следующем примере, когда я напечатал "Products.find ({})" в консоли Chrome, я сталкивался:

VM1592:1 Uncaught ReferenceError: Products is not defined

клиент/main.html:

<body> 
    {{> addProduct}} 
</body> 

<template name="addProduct"> 

    <form class="addNewProduct"> 
    product name:<br> 
    <input type="text" name="name"><br> 
    <button type="submit" value="submit">Submit</button> 
    </form> 
</template> 

клиент/main.js:

import {Products} from "/lib/collections/products"; 
import './main.html'; 
Template.addProduct.events({ 

    'submit .addNewProduct'(event) { 
    event.preventDefault(); 

    const target = event.target; 
    const name = target.name.value; 

    Products.insert({ name }); 
    }, 
}); 

Библиотека/коллекция/products.js:

export const Products = new Mongo.Collection('products'); 

Я не удалял "autopublish". Что здесь действительно не так?

Благодаря

Дерек

ответ

0

Я думаю, вы используете Meteor 1.3 или более поздней версии, так что имеет смысл, потому что в этих версиях Метеор адаптирует систему модулей ES6. Поэтому доступ к вашей коллекции невозможен во всем мире. Если вы хотите получить доступ к ним в консоли клиента, я предлагаю этот код в client/main.js:

import { Products } from "/lib/collections/products"; 
import './main.html'; 

if (Meteor.isDevelopment) { 
    window.Products = Products; 
} 

Template.addProduct.events({ 
    // ... 
}); 

Это позволит вам получить доступ к Products коллекции в консоли клиента при разработке, но не на производстве.

+0

Итак, Meteor 1.3+ больше не будет поддерживать прямой доступ к коллекциям? – derek

+0

Не совсем, если вы определяете переменную вне папки 'import' без' var/let/const', эту переменную можно получить глобально. – Khang

+0

Другими словами, если вы используете var/let/const или ваши файлы находятся в папке «import», ваша коллекция не будет доступна на стороне клиента. Правильно ли это> – derek