2016-12-08 5 views
0

Я следую за курсом udemy на Meteor.Meteor js - невозможно вставить данные на Mongo через пульт

шаги, чтобы повторить мою проблему:

1) На CMD:

meteor create Leaderboard 
cd Leaderboard 
meteor npm install 
meteor run 
(server starts, localhost:3000) 

2) Затем я удалил содержимое main.css, main.html & main.js (под клиентская папка).

3) Открытые main.js и добавил следующую строку:

PlayersList = new Mongo.Collection('players'); 

На консоли Хрома я напечатал 'PlayersList' и получил следующее:

M…o.Collection {_transform: null, _connection: Connection, _collection: LocalCollection, _name: "players", _driver: LocalCollectionDriver…} 

ПРОБЛЕМА

Когда я набираю это на консоли:

PlayersList.insert({ name: 'David', score: 0 }); 

Это ошибка:

"eebRFhA9vbSfHzPKk" 
meteor.js?hash=e3f53db…:930 insert failed: Method '/players/insert' not found 

Почему я получаю это? Я следовал точным шагам инструктора. Что здесь не так?

+0

Что такое abt pub/sub? У вас есть неуверенность? –

+0

Я сделал точные шаги, описанные выше, я как бы новичок в этом, и из того, что я прочитал, небезопасно, по умолчанию, если не удалено. Я собираюсь попробовать это. EDIT: просто остановился на сервере и удалился небезопасно, то же самое произошло. – Rosenberg

ответ

2

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

приложения по умолчанию, созданное meteor create app содержит два main.js файлов, один в client и один в server папки. Эти специально названные папки работают точно так, как вы ожидали, - содержимое в них загружается только на клиент или сервер. По-видимому, вы добавили определение коллекции только к такому в client. Чтобы исправить это, если вы поместите файл за пределы этих специально названных папок, скажем, создайте папку с именем collections и добавьте туда файл PlayersList.js и определите свою коллекцию там, после чего он будет загружен обоими и работать.

В качестве альтернативы (рекомендуется использовать при разработке более крупного приложения), если вы поместите файл, который определяет коллекцию в папку с именем imports, то вы можете import, что на ваш серверный и клиентский коды отдельно, вместо автоматического включения Метеор Это. Вы можете больше узнать о структуре применения Метеор here.

+0

Я не знал, что ты должен был это сделать. В любом случае, в соответствии с вашими инструкциями я создал папку с именем «import» в корневом каталоге, добавил новый файл «leaderboard.js» и добавил туда свою коллекцию. После этого я импортировал «import/leaderboard.js» как на клиент, так и на сервер. Теперь я получаю следующую ошибку: ** insert failed: Access denied ** – Rosenberg

+0

Начал с нуля с помощью опции -bare при создании.Сейчас работает отлично. – Rosenberg

+0

@ Розенберг Вы, видимо, удалили пакет «небезопасный». Как только вы это сделаете, вам нужно определить дополнительные правила, чтобы разрешить вставку. Но вы доберетесь до этого. Удачи вам в изучении Meteor :) – Waiski

0

Попробуйте следующее: - PlayersList._collection.insert ({имя: 'David', score: 0});

+0

Можете ли вы объяснить? –