2017-09-03 66 views
0

我試圖從的NodeJS服務器發送對象到前端同步,但一個屬性是在路上的NodeJS快遞發送對象不與前端

服務器

router.post('/cart/retrieve', (req, res) => { 
    let cart = req.session.cart; 
    let prodId = Object.keys(cart); 

    Product.find({_id: {$in: prodId}}, (err, result) => { 
     if (err) throw err; 

     let resultToSend = []; 

     for (let i = 0; i < result.length; i++) { 
      let curResult = result[i]; 

      curResult['cartQuantity'] = parseInt(cart[curResult._id]); 
      result[i] = curResult; 
     } 
     resultToSend = result; 

     console.log(resultToSend[0]['cartQuantity']) 

     res.json({cart: resultToSend}) 
    }); 
}); 

前端

不斷收到刪除
$("#top-cart-trigger").click(function(e){ 
    $.post('/api/shop/cart/retrieve',{ 

    }, function (returnResult) { 
     console.log(returnResult['cart'][0]['cartQuantity']) 
     let products = returnResult['cart']; 
     console.log(returnResult) 
     for(let i = 0; i < products.length; i ++){ 
      let curProduct = products[i]; 
      console.log(curProduct['cartQuantity']) 
     } 
    }); 

}); 

所以實際上從服務器發送的json變量和從前端收到的returnResult是相同的變量。但是,我的console.log(resultToSend[0]['cartQuantity'])返回3(這是正確的),但是所有元素均未定義console.log(curProduct['cartQuantity'])。我究竟做錯了什麼?

+0

邊注,以取代循環(這不是問題):在'結果[I] = curResult;'的循環是完全沒有意義的。所以'let resultToSend = [];'是'= []'',因爲你稍後用'result'覆蓋它。 (事實上​​,整個'resultToSend'變量在這個代碼中沒有任何用處。) –

+0

像這樣嘗試 - > https://jsfiddle.net/qcdmv9vk/,'product'很可能是一個遊標,而不是你應該正在編輯 – adeneo

+0

'result'中有什麼?例如,如果條目是數組,則向它們添加非元素屬性將會起作用,但該屬性不會被序列化爲JSON。 –

回答

0

我認爲問題可能來自服務器中的可變變量result

但是,它好像變量returnResult['cart']是JSON,你期待數組。您可以使用'for in'代替。見https://developer.mozilla.org/cs/docs/Web/JavaScript/Reference/Statements/for...in

剛剛嘗試這個

for (let key in returnResult['cart']){ 
     console.log(returnResult['cart'][key]['cartQuantity']); 
    } 
+0

不,它是從mongodb中檢索的一個對象數組 – forJ