Данные не передаются с клиента на сервер в Meteor

#mongodb #meteor #meteor-autoform

#mongodb #meteor #meteor-autoform

Вопрос:

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

Проблема заключается в передаче данных на сервер.

После запуска meteor и ввода некоторого значения из консоли браузера я не могу увидеть их обратно в браузере.Но я могу найти их с помощью in console, используя команду «Tdos.find().fetch()», она показывает введенные мной массивы, но если я пытаюсь найти в консоли mongodb, мы не смогли их найти. Может ли кто-нибудь разобраться в моей проблеме и где я ошибаюсь?

   <head>
     <title>simpletodos</title>
  </head>

 <body>

     {{> todoList}}
 </body>


  <template name="todoList">
  <h3>Todos</h3>
   <ul>
  {{#each tdos}}
      {{> todo}}
  {{/each}}
 </ul>
     <button class="add-todo">Add todo</button>

  </template>
  <template name="todo">
      <li>
       {{label}}
   </li>
</template>
  

Client/Main.js

   if(Meteor.isClient) {

    Template.todoList.helpers({
     todos: function() {
     return Tdos.find();
    }
  });

    if(Meteor.isServer) {

    }
  }
  

Server/main.js

   import { Meteor } from 'meteor/meteor';

  Tdos = new Mongo.Collection("tdos");

 Meteor.startup(() => {
   // code to run on server at startup
  });
  

Комментарии:

1. Привет, Sravan, ваша коллекция должна быть объявлена как на стороне сервера, так и на стороне клиента. Если вы определяете коллекцию в collection.js файл, обязательно сделайте его доступным для клиента и сервера. (например, папка lib)

2. Я хочу показать свою структуру папок. .Meteor -> 3 папки (клиент, Коллекция, сервер). Под клиентом (Main.html ,Main.css,Main.js ). Находящийся в стадии сбора (Tdos.js (Декларация о сборе)). Под сервером (Main.js ).

3. Теперь все работает отлично, спасибо, Ян, что ответил на мой вопрос.

Ответ №1:

На вашем сервере вы определяете коллекцию следующим образом:

 Tdos = new Mongo.Collection("tdos");
  

Это означает, что коллекция в Mongo является todos, и вы можете перечислить содержимое с помощью

 db.todos.find()
  

Вы можете вставить запись в mongo, используя это:

 db.todos.insert({label: "My first to do"})
  

В Meteor, когда вы хотите извлечь или вставить / обновить, вы используете Tdos, например

 Tdos.insert(...};
  

Ваш помощник позволяет данным быть доступными в виде массива в вашем коде. Я думаю, вам нужно изменить это, чтобы быть

 todos: function() {
    return Tdos.find().fetch();
}
  

Комментарии:

1. Спасибо, Миккель, за ваш ответ.

2. Я попробовал вышеупомянутое предложение и нашел некоторые результаты, а также внес еще одно изменение. То есть я изменил местоположение объявления коллекции. Я создал новую папку с именем Collection, в которой я поместил объявление отдельно в js-файл. Теперь я могу видеть записи в браузере. Но я не смог найти коллекцию в терминале mongodb. Поскольку имя моей коллекции «tdos». Я пробовал как db.tdos.find() Но он показывает только пустой массив… Теперь, как я могу найти коллекцию в терминале MongoDB?

3. Все работает нормально, Миккель, спасибо, что ответил на мой вопрос.