新しいプロジェクトを作成します。
$ mrt create sandbox
$ mrt remove autopublish
$ mrt add collection2
次のコードを使用して、キーに一意の制約を持つ単純なコレクションを作成します
SandBoxCollection = new Meteor.Collection('sandboxcoll', {
schema: new SimpleSchema({
title: {
type: String,
min: 3,
unique: true,
index: true
}
})
});
if (Meteor.isServer) {
Meteor.publish('sandboxpub', function() {
return SandBoxCollection.find();
});
}
if (Meteor.isClient) {
Meteor.subscribe('sandboxpub');
}
Meteor.methods({
create: function(doc) {
var docId = SandBoxCollection.insert(doc, {validationContext: 'create'}, function(err, res) {
if (err) {
throw new Meteor.Error(333, SandBoxCollection.simpleSchema().namedContext('create').invalidKeys());
}
return res;
});
return docId;
}
});
簡単なコレクション、pub/sub、および挿入に使用できるメソッドをセットアップしました。
次に、ブラウザー コンソールを使用して次のコマンドを発行します。
最初にドキュメントを作成しましょう。
Meteor.call('create', {title: 'abcd01'}, function(e,r){
console.log(e ? e : r);
});
collection.insert() を使用して、複製を直接挿入してみましょう。
SandBoxCollection.insert({title: 'abcd01'}, function(e,r) {
console.log('error: ');
console.log(e);
console.log('errorkeys: ');
console.log(SandBoxCollection.simpleSchema().namedContext().invalidKeys());
console.log('result: ');
console.log(r);
});
適切な 333 エラーがコールバックによって処理され、コンソールに記録されていることがわかります。
メソッドを使用して複製を挿入してみてください。
Meteor.call('create', {title: 'abcd01'}, function(e,r){
console.log(e ? e : r);
});
直接挿入とは異なり、このメソッドはキャッチされない例外をスローすることに注意してください。さらに、カスタム スローからエラーがスローされ、エラー コード 333 が表示されます。
なぜこれが適切に処理されないのですか?これを軽減してエラーを処理できるようにするにはどうすればよいですか (ユーザーに通知する、元のドキュメント ページにリダイレクトするなど)。