2016-10-01 4 views
0

res.json()でExpress経由でjson応答を送信しようとしていますが、res.json()で送信されたオブジェクトのrecordsの値空です。res.json()では配列は空ですが、res.json()呼び出しの前後に存在します

私はこのコードブロックがあります。ここでは

stats.activities(params).then(res => { 
    processActivities(res, response => { 
     console.log(response); // => logs response properly 
     globalRes.json({ 
      ok: true, 
      message: '', 
      records: response // response is an empty array 
     }); 
     console.log(response); // => logs response properly 
    }); 
}); 

があるが、私の console.logs()

[ players: [ [ [Object], [Object], [Object] ] ] ] 
[ players: [ [ [Object], [Object], [Object] ] ] ] 

そして、ここで私は(ポストマンに)戻って取得しています応答である:

{ 
    "ok": true, 
    "message": "", 
    "records": [] 
} 

これを引き起こした原因は何ですか?

+0

です:あなたはおそらく、オブジェクトをしたい

let a = []; a.player = 'jack'; console.log(JSON.stringify(a)); // [] 

は、ここで問題を実証する例を示しますか?また、 'processActivities'は奇妙な呼び出しシグネチャを持っています:' err、result'の標準規約に従わないコールバックを呼び出します。あなたはそれを正しく呼んでいると確信していますか? – robertklep

+0

@robertklep実際には本当の配列です。うん、私はそれを正しく呼んだ、それは私がまだエラーを実装していない自分の機能です。 –

+0

'response'には正確に何が入っていますか? 'JSON.stringify()'は、長さがないか、 'toJSON'や何かをオーバーロードすると混乱しているようです。 – robertklep

答えて

3

これは有効な配列ではありません。配列にはplayerというプロパティがあります。JSON.stringifyを呼び出すと無視されます。それは本当の配列( `Array.isArray(レスポンス)`)

let a = {}; 
a.player = 'jack'; 
console.log(JSON.stringify(a)); // {"player":"jack"} 
+0

ええ、上のあなたのコメントは私がそれをもっと近く見ていると私はそれを実現しました。それを指摘してくれてありがとう! –

0

globalResとは?通常は、コールバックの関数によって取得される応答変数を使用する必要があります。恐らく回避策を取ろうとします。おそらく、globalResが実際に送信された後でconsole.logが実行されるでしょう。

ノードはほとんど非同期です。常にこのことを念頭に置いてください。

[ players: [ [ [Object], [Object], [Object] ] ] ] 

配列は、数値インデックスを持っており、長さ:

+0

'globalRes'は明示的な応答オブジェクトです。私はok:true、message: ''、そしてレコードは空の配列です。私はそれが応答を終わらせる明白な問題ではないと思う。 –

+0

だから何が起こったのかを確認してください。明らかにあなたの応答( "応答"オブジェクト、またはglobalResのいずれか)が変化しています。デバッガを使用すると、何が起きているかがわかります。 – sznowicki

関連する問題