не может переключаться между изображением и видео в html - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь создать форму, которая может принять либо изображение, либо видеофайл, который затем отображается на главной странице, но условие if не работает. Это работает правильно, если я удаляю условие if для изображений, но не для видео (изначально оно предназначалось только для изображений). Но если я использую это в моем e js, оно не работает, оно показывает внутреннюю ошибку сервера, пока давая [объект Object] в консоли

схема

var campgroundSchema = new mongoose.Schema({
    name: String,
    price: String,
    images: [{ url: String, public_id: String, format: String }],////here i am using format jpg or mp4 to identify
    format: String,
    description: String,
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        username: String
    },
    created: { type: Date, default: Date.now },
    comments: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "Comment"
    }]
});

я использую cloudinary для загрузки

 allowedFormats: ['jpeg', 'jpg', 'png', 'gif', 'mp4'],
    filename: function(req, file, cb) {
        let buf = crypto.randomBytes(16);
        buf = buf.toString('hex');
        let uniqFileName = file.originalname.replace(/\.jpeg|\.jpg|\.png|\.gif|\.mp4/ig, '');
        uniqFileName += buf;
        cb(undefined, uniqFileName);
    }

формы, через которую я загружаю

 <form action="/c" method="post" enctype="multipart/form-data">
            <h2 style="text-align: center;">Add new entries</h2>
            <div style="width: 30%; margin: 20px auto;">
                <div class="form-group"><input class="form-control" type="text" name="ca[name]" placeholder="name">
                </div>
                <div class="form-group">
                    <input class="form-control" type="number" name="ca[price]" placeholder="Price">
                </div>
                <div class="form-group">
                    <label for="image">Image</label>
                    <input type="file" id="image" name="images" accept="image/*,video/*" multiple required>
                </div>
                <div class="form-group">
                    <input type="text" name="ca[description]" class="form-control" placeholder="description">
                </div>

                <div class="form-group">
                    <button class="btn btn-primary" type="submit">submit!!</button></div>
                <a href="/c">Go back</a>
            </div>
        </form>

но если я использую это в моем e js, он не работает, он показывает внутреннюю ошибку сервера при выдаче [объекта Object] в консоли

 <% if (data.images[0].format==="mp4"){%>
                            <video src="data.images[0].url" controls></video>
                            <%}else{ %>
                                <a href="/c/<%= data._id %>"><img class="card-img-top" src="<%=data.images[0].url%>" alt="Card image cap"></a>
                                <%}%>

post route

router.post("/", middleware.isloggedin, upload.array('images'), async function(req, res) {
    try {
        // console.log(req.files);
        req.body.ca.images = [];
        for (const file of req.files) {
            req.body.ca.images.push({
                url: file.secure_url,
                public_id: file.public_id,
                format: file.format
            });
        }
        req.body.ca.author = {
            id: req.user._id,
            username: req.user.username
        }
        req.body.ca.created = new Date();
        const campground = await Campground.create(req.body.ca);
        // console.log(campground);
        res.redirect('/c/' + campground.id);
    } catch (err) {
        req.flash("error", err.message);
        res.redirect("back");
    }
});
...