Я пытаюсь создать форму, которая может принять либо изображение, либо видеофайл, который затем отображается на главной странице, но условие 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");
}
});