-1

我只是在meteor中写了一个错误通知面板,在这里我创建了一个客户端mongodb,但我无法通过throwError函数将Meteor.Error消息推送到该客户端db,目前它显示在一个警报框中

集合/signup.js

signupDB = new Meteor.Collection('signup');

Meteor.methods({

    signupSubmit : function(postData) {

        var signinEmailExist = signinDB.findOne({
        email : postData.email
        });

        if (postData.email && signinEmailExist)
        throw new Meteor.Error(422, "exist in signinDB");

        var signupEmailExist = signupDB.findOne({
        email : postData.email
        });

        if (postData.email && signupEmailExist)
        throw new Meteor.Error(422, "exist in signupDB");       //    

        var user = _.extend(_.pick(postData, 'email', 'password'), {
            insert_time : new Date().getTime()      });

        var userId = signupDB.insert(user);

        return userId;

    }

});

客户端/错误/error.js

errorDB = new Meteor.Collection(null);

throwError = function(data) {
    errorDB.insert({data: "in throwError", del: "N"})
}

errorDB.insert({data: "in signup", del: "N"})代码在客户端文件夹中的任何地方都可以工作

此处 throwError 函数无法调用,但 signupSubmit 方法错误显示在警告框中

是发布/订阅的问题(不是为注册数据库编写的)吗?

我如何从 Meteor.Methods 捕获 Meteor.Error 警报并将其插入客户端数据库?

有没有像 throwError 这样的其他函数来捕获 Meteor.Methods 错误?

4

1 回答 1

3

您如何调用该方法?您需要执行以下操作:

Meteor.call('signupSubmit', user, function(err) {
  errorDB.insert(err);
});

但是,您似乎正在实施一个自定义的、不安全的身份验证系统。你不应该这样做;Meteor 有一个很棒的、安全的内置帐户包。您需要做的就是(在客户端):

errors = new Meteor.Collection;

Accounts.createUser({
  email: email,
  password: password
}, function(err) {
  errors.insert(err);
});

如果用户名/电子邮件重复,该Accounts.createUser方法会自动返回错误。

于 2013-11-10T04:30:46.107 回答