【问题标题】:MeteorJS insert method not insertingMeteorJS插入方法未插入
【发布时间】:2015-07-23 06:12:52
【问题描述】:

我正在尝试编写一个应用程序来作为学习工具进行实时消息传递。在过去的 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>

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

【问题讨论】:

  • 你还有自动发布和不安全的吗?可以从浏览器控制台插入吗?
  • 您是从浏览器控制台还是直接从 Mongo(通过 shell 中的 meteor mongo)检查新消息文档是否存在?奇怪的是您的文档正在编写,但您没有发布和订阅消息集合。
  • 我开启了自动发布,但我没有开启安全功能。当我尝试从开发者控制台插入时,提示插入失败,访问被拒绝

标签: javascript mongodb web-applications meteor insert


【解决方案1】:

您的代码运行良好,并且项目保存在数据库中。正如 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() 是否未定义。

【讨论】:

  • 我正在把它作为一种教学工具,我将对其进行编辑并重新排列一堆东西,然后再将它应用到任何我想写上我的名字的东西上。我知道我必须清理输入,我只是想让它工作。不过还是谢谢你的建议。我通过外壳检查了数据库,并且没有填充消息。我也在这条消息上发出警告,一旦它到达服务器端,它似乎就消失在了以太中。用户系统也运行良好。就是这个消息集合。
  • 哦该死,它实际上正在记录它,但我假设它正在将它记录在浏览器控制台中。它正在运行meteorjs脚本的终端中记录消息
  • 我在查询数据库时输入了消息而不是消息。我是个白痴。感谢您的帮助!
  • @Subnatural -> 祝你项目顺利。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多