为什么我没有通过服务器上的Meteor.method?

时间:2014-03-21 12:27:10

标签: mongodb collections meteor meteorite

我试图在登录用户集合中添加网址。我的最终目标至少是能够添加一个字段,例如{profilePicture: 'http://randompic.com/123.png'}

到目前为止,我所尝试的是:

<template name="profile">
  <h1>My Profile</h1>
  <form class="form-inline"action="">
    <label for="url"></label>
    <input class="input input-large" type="url" name="url" placeholder="URL for you image..." id="url">
    <button class="btn btn-success submit">Update profile picture</button>
  </form>
</template>

当用户按下更新个人资料图片按钮时,我将其发送到此帮助程序功能:

Template.profile.events({
  'click .submit': function (evt, tmpl) {
    var userid = Meteor.userId();
    var url = tmpl.find('#url').value;
    var options = {_id: userid, profilePicture: url};
    Meteor.call('addToProfile', options);
  }
});

我试图提醒选项._id和options.profilePicture,我可以使用该数据。 现在,当我将它传递给我的server.js文件时,我没有输出我的警报:

Meteor.methods({
  'addToProfile': function(options) {

  //Not even this alert will show.. 

    alert(options._id);    Edit: console.log() works on the server thought.
  } 
})

这是我的第一个问题。

第二个问题(即将到来)是我不知道如何使用此profilePicture数据更新/添加到用户集合。如果有人可以通过该部分的一个小例子做出贡献,我将非常感激。

1 个答案:

答案 0 :(得分:0)

根据评论,一切似乎都按预期运作。您似乎只是尝试更新客户端上的某些用户数据。由于您删除了insecure包,因此需要验证服务器上的更新(客户端请求的更新),这就是您要这样做的方式:

// only applies to client requests
Meteor.users.allow({
    // validation for user inserts
    insert: function ( userId, doc ) {

        // perform any checks on data that you want to perform, like checking to see if the current user is an admin.

        // this check just requests that a user be logged in
        return userId;
    }
    , 
    // is your validation for user updates
    update: function ( userId, doc, fields, modifier ) {

        // again, perform any validation you want. A typical check is to make sure they didn't add any extra fields.

        // this makes sure a user is logged in and that they are only attempting to update themself
        return userId === doc._id;
    }
});

docs中有一些更全面的例子。现在你可以像往常一样调用更新,并依靠服务器来执行任何验证!