Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 快速响应:将数组作为JSON发送_Arrays_Json_Node.js_Mongodb - Fatal编程技术网

Arrays 快速响应:将数组作为JSON发送

Arrays 快速响应:将数组作为JSON发送,arrays,json,node.js,mongodb,Arrays,Json,Node.js,Mongodb,我在尝试从后端express api获取数据时遇到问题。我也在使用mongodb和mongoose。这是我的密码: 代码: URL响应: { "cart": { "_id": "5953b153d2108941d15a7fe9", "updatedAt": "2017-06-28T13:38:27.406Z", "createdAt": "2017-06-28T13:38:27.406Z", "owner": "595153

我在尝试从后端express api获取数据时遇到问题。我也在使用mongodb和mongoose。这是我的密码: 代码:

URL响应:

{
    "cart": {
        "_id": "5953b153d2108941d15a7fe9",
        "updatedAt": "2017-06-28T13:38:27.406Z",
        "createdAt": "2017-06-28T13:38:27.406Z",
        "owner": "595153ad6f18427ef38c416b",
        "__v": 0,
        "product": [],
        "id": "5953b153d2108941d15a7fe9",
        "editable": false
    }
}

控制台日志中的所有内容都是我希望在products数组中返回的响应内容,但当我推送它时,它不会填充数组。有什么想法吗?

您试图在同步代码(例如for循环)中调用异步代码(例如Db query)。这就是为什么它在第一次获得数据后将数据返回给客户机。您可以
async
promise.all
来解决问题

var async = require('async')

const show = (req, res) => {
    const product = {}
    product.array = new Array()
    console.log(req.cart.product[1])
    async.each(req.cart.product, function(id, cb){
        Product.find({_id: ObjectId(id)},function(err,products){
          if (err) {
            cb(err)
          } else {
            product.array.push(products)
            console.log(product.array)
            cb()
          }
       })
    }, function(err){
       if (err) {
          return res.sendStatus(500)
       } else {
          req.cart.product = product.array
          return res.json({
             cart: req.cart.toJSON({ virtuals: true, user: req.user })
          })   
       }
    })
}
基于承诺的解决方案:

const show = (req, res) => {
    const product = {}
    product.array = new Array()
    console.log(req.cart.product[1])

    const promises = []     
    req.cart.product.forEach(function(id){
        promises.push(Product.find({_id: ObjectId(req.cart.product[i])}))
    })

    Promise.all(req.cart.product.map(function(id) {
        return Product.find({_id: ObjectId(id)})
    })).then(function(products){
        req.cart.product = product.array
        return res.json({
            cart: req.cart.toJSON({ virtuals: true, user: req.user })
        })
    }).catch(function(err){
        return res.sendStatus(500)
    })
}
var async = require('async')

const show = (req, res) => {
    const product = {}
    product.array = new Array()
    console.log(req.cart.product[1])
    async.each(req.cart.product, function(id, cb){
        Product.find({_id: ObjectId(id)},function(err,products){
          if (err) {
            cb(err)
          } else {
            product.array.push(products)
            console.log(product.array)
            cb()
          }
       })
    }, function(err){
       if (err) {
          return res.sendStatus(500)
       } else {
          req.cart.product = product.array
          return res.json({
             cart: req.cart.toJSON({ virtuals: true, user: req.user })
          })   
       }
    })
}
const show = (req, res) => {
    const product = {}
    product.array = new Array()
    console.log(req.cart.product[1])

    const promises = []     
    req.cart.product.forEach(function(id){
        promises.push(Product.find({_id: ObjectId(req.cart.product[i])}))
    })

    Promise.all(req.cart.product.map(function(id) {
        return Product.find({_id: ObjectId(id)})
    })).then(function(products){
        req.cart.product = product.array
        return res.json({
            cart: req.cart.toJSON({ virtuals: true, user: req.user })
        })
    }).catch(function(err){
        return res.sendStatus(500)
    })
}