web-dev-qa-db-ja.com

Meteor.method呼び出しに挿入した後に_idを取得します

ドキュメントを挿入した後、_idを取得する必要があります。

クライアントの場合:

Meteor.call('saveDocument', value1, value2);

サーバー内

saveDocument: function (value1, value2) {
    MyCollection.insert({ 'value1': value1, 'value2': value2});
}

サーバー側でインサートのコールバック機能を試してみました。このようにして、ドキュメントの_idを取得できますが、コールバック関数内で、これはクライアント呼び出しに戻ることができません。

saveDocument: function (value1, value2) {
    MyCollection.insert({ 'value1': value1, 'valu2': value2}, 
        function(err, docsInserted){ console.log(docsInserted) }); 
        //Works, but docsInserted can't return to the client.
}
25
Oscar Saraza

クライアント呼び出しは非同期スタイルを使用する必要があります-ドキュメントから

クライアントでは、コールバックを渡さず、スタブ内にいない場合、呼び出しはundefinedを返し、メソッドの戻り値を取得する方法がありません。

Meteor.call('saveDocument', value1, value2, function(error, result){
  var theIdYouWant = result;
});

次に、メソッドからIDを返すだけです

saveDocument: function (value1, value2) {
  return MyCollection.insert({ 'value1': value1, 'valu2': value2}); 
}

適切な測定のために、ドキュメントのこれらの2つのセクションにもう一度やり直してください

http://docs.meteor.com/#meteor_call

http://docs.meteor.com/#insert

38
nate-strauser

同じ問題が発生したときにこの質問が見つかりました。このソリューションでは、クライアント側で.insert()を使用すると、コールバックで正常に機能します。このようなもの:

Collection.insert({
    something: something    //insert to Mongo
}, (error, response) => {
    console.log(error, result   //get the response
)});
0
Simon