2

クライアントから Meteor メソッドを呼び出し、コールバックで結果を期待するこのコードがあります。このresultsオブジェクトは、サーバーのコンソールから文字列化して出力できる整形式のオブジェクトです。

このコードを実行すると、有効な結果とエラーなしで、コールバックはクライアントで呼び出されません。ただし、 で置き換えるfut.return(results)fut.return(JSON.parse(JSON.stringify(results)))、コールバックが呼び出され、クライアントで「文字列」が取得されます。文字列を返すことができるのにオブジェクトを返すことができない理由は何ですか?

サーバー コード (内Meteor.Methods()):

getUserEvents : function(userId,start,end) {
        var fut = new Future();
        getUserEventsPrivate(userId,start,end,function(err,results){
            if(err){
                fut.throw(new Meteor.Error( 500, 'Oops, something wrong happened'));
            }else{
                fut.return(results); // works when fut.return(JSON.parse(JSON.stringify(results)));
            }
        });
        return fut.wait();
    }

クライアント:

Meteor.call('getUserEvents',Meteor.user()._id, startStr, endStr,function(err,results){
    console.log(results);
});

ここでの編集 は、「結果」として渡そうとしている Json です。

[
  {
    "title": "ResponsiveMTL #1",
    "start": "2015-10-13T21:30:00.000Z",
    "end": "2015-10-14T00:30:00.000Z"
  },
  {
    "title": "Meteor Global Distributed Hackathon",
    "start": "2015-10-10T15:00:00.000Z",
    "end": "2015-10-11T15:00:00.000Z"
  },
  {
    "title": "retenues a la source",
    "start": "2015-10-08T19:25:00.275Z",
    "end": "2015-10-08T19:25:00.275Z"
  },
  {
    "title": "Salsa",
    "start": "2015-09-19T22:00:00.000Z",
    "end": "2015-09-19T23:00:00.000Z"
  },
  {
    "title": "Salsa",
    "start": "2015-10-09T22:00:00.000Z",
    "end": "2015-10-09T23:00:00.000Z"
  }
]
4

1 に答える 1

1

この方法でオブジェクトを返すことは完全に可能です。

あなたのオブジェクトはおそらくすぐに EJSON シリアライズ可能ではありませんが、実際にサンプルを見ないと判断するのは難しいでしょう。

たとえば、オブジェクトに循環参照が含まれている場合、EJSON は暗黙のうちに失敗し、コールバックは呼び出されません。JSON を取得してシリアル化できるため、これが当てはまる可能性はほとんどありません。

問題のあるプロパティを見つけて変更することはできますが、カスタム タイプとして EJSON に登録することをお勧めします。

http://docs.meteor.com/#/full/ejson_add_type

とにかく、あなたの実際のオブジェクトを見て、より多くのことを知ることができれば興味深いでしょう.
Meteor のどのバージョンを使用していますか?

于 2015-10-09T06:25:01.067 に答える