用从mongodb获得的值填充数组后,将数组作为JSON响应发送

时间:2019-08-14 12:35:53

标签: javascript node.js mongoose

我正在尝试将文档ID数组作为JSON响应发送,但由于响应而获得的数组为空。如何确保在发送数组IDs作为响应之前先由文档exports.createItem = async (req,res,next) => { let itemsIds = []; req.body.forEach( async element => { let doc = await Item.findOneAndUpdate({ type: element.type, color: element.color, size: element.size }, { $inc:{stock: element.stock} }, {upsert:true, new: true}); itemsIds.push(doc._id); }); res.status(200).json({ success: true, itemsIds: itemsIds }) } 填充数组?

res.status(200).json({...})

我想确保itemsIds方法仅在将所有文档ID推送到mongo DB之后才运行。现在,我在响应中得到的[ ]SELECT pageTitle, SUM(unique_pageviews) AS unique_pageviews, SUM(CASE WHEN traffic_channel = 'Organic' THEN unique_pageviews ELSE 0 END) AS Organic, SUM(CASE WHEN traffic_channel = 'Email' THEN unique_pageviews ELSE 0 END) AS Email, SUM(CASE WHEN traffic_channel = 'Paid' THEN unique_pageviews ELSE 0 END) AS Paid FROM yourTable GROUP BY pageTitle; 。如何在发送响应之前先确保由item id填充itemsIds数组?

1 个答案:

答案 0 :(得分:2)

forEach循环包含一个回调函数,在这里我们不应该使用异步等待,使用for循环来等待结果,将其推入数组,然后发送响应。

exports.createItem = async (req,res,next) => {
    let itemsIds = [];
    for (var element of req.body) {
        let doc = await Item.findOneAndUpdate({
            type: element.type,
            color: element.color,
            size: element.size
            }, {
            $inc:{stock: element.stock}
            }, {upsert:true, new: true});   
        itemsIds.push(doc._id);
    }
    res.status(200).json({
        success: true,
        itemsIds: itemsIds
    })
}