如何制作回调和变量,以便将数据保存到我的数据库?
我有如下所示的节点 app.post。我需要将表单数据转换为猫鼬模型。我得到的数据在两个数组中,只有数量大于 0 的数据才会被搜索和保存,但这不起作用,我无法绕过它。
我认为循环和搜索成分应该是一个函数,而 Meal.save 应该在回调中,但我不知道如何。几个星期以来,我一直在思考这个问题,我已经用谷歌搜索过了,但这对我来说并不开放。请帮我解决一下这个。
提前致谢!
应用程序.js
app.post("/diary/:id/dayshow", function(req, res) {
// Get the day I want to save my meal data
Day.findById(req.params.id, function(err, day) {
if (err) {
console.log(err);
res.redirect("/diary");
} else {
// This is the format I have in the mongoose model
// and I need to convert HTML form data to this
var singleMeal =
{
// title: dinner
// ingredients: [
// {
// ingredient:{},
// amount: Number
// }
// ]
}
var singleMealTempArr = [];
var singleIngredientObj = {};
var amount;
singleMeal.title = req.body.title;
// Looping through the HTML form data and converting it to mongoose model
// I want to loop data and search mongo first and after that I need to save
// the data to mongo which happens in Meal.save()
for (var i = 0; i < req.body.amount.length; i++) {
var _id = req.body.id[i];
amount = Number(req.body.amount[i]);
if (amount !== 0) {
singleIngredientObj.amount = amount;
// Searching ingredient from database with ID what is from the HTML form
Ingredient.findById({_id}, function(err, foundIngredientData){
console.log(foundIngredientData + "<<<<<<<<<<<<< ingredientData");
singleIngredientObj.ingredient = foundIngredientData;
singleMealTempArr.push(singleIngredientObj);
console.log(JSON.stringify(singleMealTempArr) + "<<<<<<<<<<<< JSON.stringify(singleMealTempArr)");
});
}
}
singleMeal.ingredients = singleMealTempArr;
// Now I should have data in singleMeal variable, but it has only title and
// empty array of ingredients
console.log("JSON.stringify(singleMeal) >>>>>>>>>" + JSON.stringify(singleMeal) + "<<<<< JSON.stringify(singleMeal)");
}
Meal.create(singleMeal, function(err, singleMealObject) {
if (err) {
console.log(err);
} else {
console.log("--- You hit the Meal.create + Save -----" + "singleMealObject: " + singleMealObject);
// day.meals.push(singleMealObject); <-- These two are commented because previous steps dont work and singleMealObject has only title and empty array of ingredients
// day.save();
res.redirect("/diary/" + day._id + "/dayshow");
}
});
});
});
我从上面得到的 console.logs 在这里:
JSON.stringify(singleMeal) >>>>>>>>>{"title":"aa","ingredients":[]} <<<<< JSON.stringify(singleMeal)
{ _id: 597c11c04a7bce08cdcdef41,
name: 'oatmeal',
kcal: 100,
protein: 2,
carb: 50,
fat: 1,
addinfo: '',
__v: 0 } <<<<<<<<<<<<< ingredientData
[{"amount":3,"ingredient":{"_id":"597c11c04a7bce08cdcdef41","name":"oatmeal","kcal":100,"protein":2,"carb":50,"fat":1,"addinfo":"","__v":0}}] <<<<<<<<<<<< JSON.stringify(singleMealTempArr)
{ _id: 597c11c04a7bce08cdcdef41,
name: 'oatmeal',
kcal: 100,
protein: 2,
carb: 50,
fat: 1,
addinfo: '',
__v: 0 } <<<<<<<<<<<<< ingredientData
[{"amount":3,"ingredient":{"_id":"597c11c04a7bce08cdcdef41","name":"oatmeal","kcal":100,"protein":2,"carb":50,"fat":1,"addinfo":"","__v":0}},{"amount":3,"ingredient":{"_id":"597c11c04a7bce08cdcdef41","name":"oatmeal","kcal":100,"protein":2,"carb":50,"fat":1,"addinfo":"","__v":0}}]<<<<<<<<<<<< JSON.stringify(singleMealTempArr)
--- You hit the Meal.create + Save -----singleMealObject: { __v: 0,
title: 'aa',
_id: 597c11cb4a7bce08cdcdef61,
ingredients: [] }
您可以查看此 stackoverflow 答案以获取与 ID 相关的记录。mongodb/mongoose findMany - 查找 ID 列在数组中的所有文档
app.post("/diary/:id/dayshow", function(req, res) {
// Get the day I want to save my meal data
Day.findById(req.params.id, function(err, day) {
if (err) {
console.log(err);
res.redirect("/diary");
} else {
// This is the format I have in the mongoose model
// and I need to convert HTML form data to this
var singleMeal =
{
// title: dinner
// ingredients: [
// {
// ingredient:{},
// amount: Number
// }
// ]
}
var singleMealTempArr = [];
var amount;
singleMeal.title = req.body.title;
function generateMeal(callback) {
var meal_ids = [];
for (var i = 0; i < req.body.amount.length; i++) {
var singleIngredientObj = {};
var _id = req.body.id[i];
amount = Number(req.body.amount[i]);
if (amount !== 0) {
meal_ids.push(_id);
singleIngredientObj.amount = amount;
singleMealTempArr.push(singleIngredientObj);
}
}
Ingredient.find({_id : meal_ids}, function(err, getIngredientsOfIds){
// not added amount. you can do it data massage whatever you want
if(err) {
//error handling
return;
}
for(var i = 0; i < singleMealTempArr.length; i++) {
singleMealTempArr[i].ingredients = getIngredientsOfIds[i];
}
singleMeal.ingredients = singleMealTempArr;
callback();
});
}
function createMeal() {
Meal.create(singleMeal, function(err, singleMealObject) {
if (err) {
console.log(err);
} else {
console.log("--- You hit the Meal.create + Save -----" + "singleMealObject: " + singleMealObject);
// day.meals.push(singleMealObject); <-- These two are commented because previous steps dont work and singleMealObject has only title and empty array of ingredients
// day.save();
res.redirect("/diary/" + day._id + "/dayshow");
}
});
}
generateMeal(createMeal);
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句