app.get('/calculatePrice', function(req, res) {
let toyIds = req.query.id,
qty = req.query.qty,
totalPrice = 0,
subtotal = 0,
result = {"items": [], "totalPrice": totalPrice},
item = {};
for (let i = 0; i < toyIds.length; i++) {
Toy.findOne({id: toyIds[0]}, { id: 1, price: 1, _id: 0 }, function(err, toy) {
if (toy) {
item[item] = toy.id; //doesnt work
item[qty] = qty[0]; //doesnt work
item[subtotal] = (toy.price * Number(qty[0])); //doesnt work
totalPrice += item[subtotal]; //doesnt work
}
});
result.items.push(item);
}
res.json(result);
});
我试图通过网址“/ calculateprice?id [0] = 1234&amp; qty [0] = 2&amp; id [1] = 1235&amp; qty [1] =提供的各个ToyIds找到mongodb中的特定玩具1和ID [2] = 1236&安培;数量[2] = 5" 。
然而,在找到一个后,我似乎无法使用数据向我的“item”对象属性添加值。
我做了一些研究,我猜它与Toy.findOne有异步,但我真的不明白,似乎无法自己找出解决方案。对noob学习节点/ mongodb的帮助和解释将非常感谢!
答案 0 :(得分:0)
您可以将循环+ findOne
替换为find
,然后您需要在回调中移动res.json(result)
以使其在您的异步过程完成时运行:
app.get('/calculatePrice', function(req, res) {
let toyIds = req.query.id;
let result = { items: [] };
Toy.find({id: {$in: toyIds}}, function(err, toys) {
if(err) {
res.status(500).json({error: true});
}
if (toys) {
// process the result
// push toys data to result.items
}
res.json(result);
});
});