-1

私は流星でエラー通知パネルを書いているだけです。ここでクライアント側のmongodbを作成しますが、throwError関数によってそのクライアント側のデータベースにMeteor.Errorメッセージをプッシュすることはできません。現在、アラートボックス内に表示されています

コレクション/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 アラートをキャッチしてクライアント側のデータベースに挿入する方法を教えてください。

Meteor.Methods エラーをトラップする throwError のような他の関数はありますか?

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 に答える