节点Js无法读取未定义的属性

时间:2020-04-29 13:19:47

标签: javascript html node.js express

我正在尝试将多个图像从表单上传到网页,但是问题是,如果我退出循环,那么它将在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");
    }

});

1 个答案:

答案 0 :(得分:0)

这是因为cloudinary.upload是异步的。在请求结束之前执行循环之外的内容。

您需要等待请求完成才能访问它。

除非您在管道上的另一个中间件上需要它们,否则您不应在请求正文中声明新变量。