2016-10-01 116 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

它是一個真正的數組('Array.isArray(響應)')?另外,'processActivities'有一個奇怪的調用簽名:它調用一個不符合'err,result'標準約定的回調函數。你確定你正確地調用它嗎? – robertklep

+0

@robertklep它確實是一個真正的數組。是的,我把它稱爲正確的,這是我自己的功能,我還沒有實現錯誤。 –

+0

「響應」究竟包含什麼?它似乎混淆了'JSON.stringify()',因爲它或者沒有長度,或者它重載'toJSON'或者什麼的。 – robertklep

回答

3

這不是一個有效的數組:

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

陣列具有數值索引,和長度。你的數組有一個名爲player的屬性,當調用JSON.stringify時,它將被忽略。

下面是一個例子演示問題:

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

你可能需要一個對象:

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

是的,你上面的評論讓我更加仔細地觀察它,並且我意識到了它。感謝您指出了這一點! –

0

什麼是globalRes?通常你應該使用回調函數抓取的響應變量。您可能會嘗試採取一些解決方法,並且可能會在實際發送globalRes後執行console.logs。

節點大多是異步的。請始終記住這一點。

+0

'globalRes'是快速響應對象,我得到的響應是ok:true,message:'',記錄是一個空數組。所以我不認爲這是一個快速結束迴應的問題。 –

+0

因此,檢查後發生了什麼。有些東西顯然會改變你的迴應(無論是「迴應」對象還是globalRes)。使用調試器,它會告訴你發生了什麼。 – sznowicki

相關問題