如何判断Accounts.addEmail是成功还是失败,如果失败,原因就在于此

时间:2015-12-04 11:35:18

标签: api meteor accounts user-feedback

我有一个页面,用户可以在其中输入新的电子邮件地址,然后此方法会尝试将其添加到他们的帐户中:

[error]   x be available for elements in a sequence
[error]    List(1, List(2, 3, List(4)), 5)
[error]      is missing: List(List(4), 2, 3)
[error]      must not contain: List(2, 3, List(4)) (specs2test.scala:98)

我正在使用Meteor中的accounts-password包。

我想在用户尝试添加新地址后给用户提供有意义的反馈,特别是如果失败,为什么会失败呢?我查看了docs,但似乎没有任何方法可以找出失败的原因。

我知道我可以在尝试添加新用户之前和之后计算用户的电子邮件地址,但这并不能告诉我该地址是否属于另一个用户,或者它是否是用户的现有地址,或者无论什么是失败的原因。

有没有办法找到像这样的API调用的结果?

3 个答案:

答案 0 :(得分:0)

您可以在此处阅读有关此方法的功能的信息: https://github.com/meteor/meteor/blob/master/packages/accounts-password/password_server.js#L847

如您所见,该方法仅在一种情况下失败:

  

如果有其他用户使用电子邮件,则操作将失败   只有不同的情况

因此,如果方法失败,您可以告诉用户该电子邮件已经注册。

答案 1 :(得分:0)

在尝试了一些之后,似乎我需要做的就是在调用方法时向我的客户端添加一个回调,然后检查是否有错误。任何错误都会自动返回给回调。

服务器:

Meteor.call('add_new_email', 'me@example.com', function(error){
  if (error) console.log("got an error " + error.reason);
});

客户端:

if (!Meteor.userId()) {
  throw new Meteor.Error("not-authorized", "You must be signed in to write a new post");
}

我没有意识到API的错误会传递给我的方法。流星 - 它总是比我想象的更聪明!

另请注意,您可以在方法中使用Meteor.Error来抛出错误,这些错误将以完全相同的方式传递给客户端回调,请参阅docs

angular script

答案 2 :(得分:0)

我知道我参加派对有点晚了但是我今天遇到了这个问题并找到了你的帖子。

我需要能够在服务器端告诉它是否失败,所以我所做的就是把它放在try-catch中,如下所示:

IndexOutOfBoundsException

仅当Accounts.addEmail未失败时,才将addSucceeded设置为true。为了确保我不会遇到错误,因为它在不同的情况下替换了相同用户的电子邮件地址"方案,我总是在保存时将电子邮件地址下载到LowCase()。