2015-07-23 3 views
0

Я пытаюсь написать приложение для обмена сообщениями в режиме реального времени в качестве инструмента обучения. Я уже четыре с половиной часа пытаюсь понять, почему мой метод вставки не работает. Он не вызывает никаких ошибок, просто не делает фактической вставки.MeteorJS insert способ не вставляя

Вот код для этого: JS клиент:

Template.input.events({ 
     "keypress .input": function(event, template){ 
      if(event.which == 13){ 
       event.preventDefault(); 

       var user = Meteor.user(); 
       var message = template.find(".input").value; 
       alert(Meteor.call("insert", user.username, message)); 

       template.find(".input").value = ""; 

      } 
     } 
    }); 

JS Сервер:

Meteor.methods({ 
     'insert':function(username, message){ 
      Messages.insert({ 
       'message': message, 
       'user': Meteor.userId(), 
       'username': username, 
       'timestamp': new Date() 
      }); 
      return "success"; 
     }, 
     'find': function(){ 
      Messages.find({}, {sort: {timestamp:-1}}); 
     } 
    }); 

HTML:

<template name="input"> 
    <div id="input"> 
     <input class="input" type="text" placeholder="Message..." id="message" /> 
    </div> 
</template> 

Я проверил с помощью консоли, чтобы подтвердить, что ничего не добавляется.

+0

У вас все еще есть автообновление и неуверенность? Вы можете вставить вкладку с консоли браузера? –

+0

Вы проверяете наличие своего нового документа сообщения с консоли браузера или непосредственно с Mongo (через 'meteor mongo' в оболочке)? Скорее всего, ваш документ записывается, но вы не публикуете и не подписываетесь на сбор сообщений. –

+0

У меня есть автообновление, но у меня нет безопасности. Когда я пытаюсь вставить из консоли разработчика, он говорит, что вставка не удалась, доступ запрещен – Subnatural

ответ

0

Ваш код работает нормально, и элементы сохраняются в БД. Точно так же, как Джордждандан и Мишель упоминали, что это, вероятно, вызвано вашими публикациями.

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

'insert':function(username, message){ 
     var id = Messages.insert({ 
      'message': message, 
      'user': Meteor.userId(), 
      'username': username, 
      'timestamp': new Date() 
     }); 
     console.log('Inserted id: ' + id); 
     var insertedMessage = Messages.findOne(id); 
     console.log(insertedMessage); 
     return "success"; 
    }, 

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

Meteor.user(). Имя пользователя

Просто убедитесь, что пользователь действительно вошел в систему, или проверить, если Meteor.user() не определено.

+0

Я делаю это больше как учебный инструмент, и я собираюсь отредактировать его и переставить кучу вещей, прежде чем я когда-либо применим его ко всему Я бы включил мое имя. Я знаю, что мне придется санировать вход, я просто пытаюсь заставить это работать. Спасибо за совет. Я проверил базу данных через оболочку, и сообщения не заполняются. Я также предупреждал об этом сообщении, и как только он идет на сервер, он, кажется, исчезает в эфире. Также пользовательская система работает отлично. Это просто коллекция сообщений. – Subnatural

+0

О, дерьмо, это было его ведение, но я предполагал, что он записывал его в консоль браузера. Он регистрировал сообщения в терминале, на котором запущен сценарий meteorjs. – Subnatural

+0

Я вводил сообщения вместо сообщений при запросе на db. Я идиот. Спасибо за помощь! – Subnatural

Смежные вопросы