MeteorJS插入方法不插入

时间:2015-07-23 06:12:52

标签: javascript mongodb web-applications meteor insert

我正在尝试编写应用程序来将实时消息作为学习工具。在过去的4个半小时里,我一直在谷歌搜索,试图弄清楚为什么我的插入方法不起作用。它不会抛出任何错误,它根本不会进行实际的插入。

以下是代码: 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>

我已使用控制台检查确认没有添加任何内容。

1 个答案:

答案 0 :(得分:0)

您的代码运行正常,项目保存在数据库中。正如jorjordandan和Michel所说,这可能是由你的出版物引起的。

检查这个的简单方法是简单地记录存储的内容。添加一些日志记录由于服务器方法始终可以访问所有集合,因此您可以看到实际存储的内容。

  '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()是否未定义。