我正在尝试将多个图像从表单上传到网页,但是问题是,如果我退出循环,那么它将在for循环的每一步创建新条目,然后req.body.ca.video1变得不确定。如何仅一次创建带有所有图像的条目。
发布路线
router.post("/n/v/n", upload.array('images'), middleware.isloggedin, async function(req, res) {
try {
req.body.ca.video1 = [];
for (var i = 0; i < req.files.length; i++) {
console.log(req.files[i].path);
cloudinary.v2.uploader.upload(req.files[i].path, { resource_type: "auto" }, function(error, result) {
req.body.ca.video1.push({
url: result.secure_url,
format: result.format
});
req.body.ca.author = {
id: req.user._id,
username: req.user.username
}
req.body.ca.created = new Date();
////if i get out of this then req.body.ca becomes undefined
const campground = await Campground.create(req.body.ca);
});
/////here the video1 goes undefined
}
req.flash("success", "it is uploading");
res.redirect("/c");
} catch (err) {
req.flash("error", err.message);
res.redirect("back");
}
});
答案 0 :(得分:0)
这是因为cloudinary.upload
是异步的。在请求结束之前执行循环之外的内容。
您需要等待请求完成才能访问它。
除非您在管道上的另一个中间件上需要它们,否则您不应在请求正文中声明新变量。