首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor方法:我一直得到一个插入失败:访问被拒绝在控制台上的错误

Meteor方法:我一直得到一个插入失败:访问被拒绝在控制台上的错误
EN

Stack Overflow用户
提问于 2016-02-11 16:28:25
回答 2查看 2.5K关注 0票数 1

我搞不懂我为什么会犯这个错误。我创造了一个流星方法。也许我只是需要第二双眼睛来指出我的错误。我正在创建一个即时通讯应用,在线用户可以进行一对一的聊天。一旦我点击在线用户(路由)。控制台立即有一个

插入失败:访问被拒绝。

如果我试图发送一条消息,这就是我收到的错误。

j…y.Event {originalEvent: originalEvent,类型:"submit",timeStamp: 1455207989065,jQuery1112075371492956765: true,其中:未定义的…} meteor.js:862插入失败:访问拒绝meteor.js:862更新失败:访问拒绝17799meteor.js:862插入失败:访问被拒绝

我对Meteor非常陌生,任何帮助或建议都将不胜感激。

这是我的HTML

代码语言:javascript
复制
    <template name="chat_page">
    <h2>Type in the box below to send a message!</h2>
    <div class="row">
        <div class="col-md-12">
            <div class="well well-lg">
            {{#each messages}}
            {{> chat_message}}
            {{/each}}
            </div>  
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <form class="js-send-chat">
            <input class="input" type="text" name="chat" placeholder="type a message here...">
            <button class="btn btn-default">send</button>
        </form>
        </div>
    </div>
</template>

<!-- simple template that displays a message -->
<template name="chat_message">
    <div class = "container">
        <div class = "row">
            <img src="/{{profile.avatar}}" class="avatar_img">
            {{username}} said: {{text}}
        </div>
    </div>  
    <br>
</template>

客户端

代码语言:javascript
复制
Template.chat_page.helpers({
    messages:function(){
      var chat = Chats.findOne({_id:Session.get("chatId")});
      return chat.messages;
    }, 
    other_user:function(){
      return ""
    }, 

  });

 Template.chat_page.events({
  'submit .js-send-chat':function(event){
    console.log(event);
    event.preventDefault();
    var chat = Chats.findOne({_id:Session.get("chatId")});
    if (chat){
      var msgs = chat.messages; 
      if (!msgs){
        msgs = [];
      }
      msgs.push({text: event.target.chat.value});
      event.target.chat.value = "";
      chat.messages = msgs;
      Chats.update(chat._id, chat);
      Meteor.call("sendMessage", chat);
    }
  }
 })

方法

代码语言:javascript
复制
Meteor.methods({
  sendMessage: function (chat) {
    Chats.insert({
      chat: chat,
      createdAt: new Date(),
      username: Meteor.user().profile.username,
      avatar: Meteor.user().profile.avatar,
    });
  },
});
EN

回答 2

Stack Overflow用户

发布于 2016-02-11 16:50:29

你还有不安全的自动包装吗?

代码语言:javascript
复制
  Chats.update(chat._id, chat);

我觉得这部分有点奇怪。集合的基本更新是: Chats.update({_id : chat._id}、{$set:{message : whateverMymsgis });Meteor对update方法有一定的严格要求,您总是需要传递_id才能更新某些内容。

如果您没有自动生成的和不安全的包,那么是否已经将所有允许/发布/归属部分都添加到集合中了??

希望能有所帮助:)

票数 2
EN

Stack Overflow用户

发布于 2016-02-11 16:58:21

之所以发生这种情况,是因为您删除了insecure包,没有为您的chat集合指定任何allow/deny,并且您的流星方法也写在了client端。

快速而正确的解决办法是将流星方法移到server side上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35344790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档