【问题标题】:Meter.call() pass variablesMeter.call() 传递变量
【发布时间】:2016-05-21 12:28:24
【问题描述】:

我正在尝试使用 Meteor.call() 并传入两个变量来完成该方法

Template.RegisterForm.events({
  'submit form': function(event) {
    event.preventDefault();
    var emailVar = event.target.registerEmail.value;
    var passwordVar = event.target.registerPassword.value;
    Meteor.call('registerUser', emailVar, passwordVar )
  }
});

但是当我调用该方法时,emailVar 和 passwordVar 并没有通过。

registerUser: function (email, password) {
  var id = Accounts.createUser({
    email: email,
    password: password
  });
}

它们出现未定义??

【问题讨论】:

  • 我应该指出,以这种方式将用户的凭据发送到服务器是个坏主意。 Accounts.createUser 从客户端使用时会在转发到服务器之前对密码进行加密。在您的情况下,您可以在创建帐户时捕获未加密的密码。
  • ?我不是有意加密用户密码吗?帐户密码/流星处理解密?我已经成功登录并将用户保存到数据库 - 我的主要问题是目前使用角色验证用户。
  • 我只是建议您在客户端上运行 Accounts.createUser,因为它的目的是使用它,而不是创建一个 shim 从客户端在服务器上运行它。
  • 是的,我看到文档说 createUser 是一个客户端函数,但是我想知道安全性吗?

标签: variables meteor methods call


【解决方案1】:

你调用 Meteor 方法很好,

var emailVar = event.target.registerEmail.value;
var passwordVar = event.target.registerPassword.value;

可能是您有问题的代码。 event.target 指的是发起事件的 DOM 元素,在本例中是表单。反过来,registerEmailregisterPassword 未定义

https://jsfiddle.net/fqp3a1mq/ 了解使用 jQuery 获取表单数据的概述。

根据您的具体问题,一个干净的解决方案是:

Template.form.events({
  'submit form'(event) {
    const $form = $(event.target);
    const formData = $form.serializeArray();
    const params = {};

    event.preventDefault();

    // loop over our form data and create a params object for our method
    formData.forEach(data => {
      params[data.name] = data.value;
    });

    Meteor.call('methodName', params);    
  },
});

Meteor.methods({
  methodName(params) {
    ...
  },
});

使用这种方法,如果您有一个名为 registerEmail 的输入,那么它将在您的 Meteor 方法中以 params.registerEmail 的形式存在。

希望这会有所帮助。

【讨论】:

  • 我喜欢这种方法,它似乎需要更多的工作,但我喜欢它通过参数传递我需要的信息。
  • 很高兴我能帮上忙 :) @Ruegen,你也应该看看 the check package,它内置在 Meteor 中。这意味着您可以很容易地在您的方法中验证您的 params 对象,这将帮助您编写更健壮的代码,并确保您的方法只采用有效的表单数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 2011-08-28
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多