Muszę przechowywać okładkę wraz z opisem (m.in. tytułem, liczbą stron itd) w mongodb. Czy da się przesłać jeden obiekt zawierający zdjęcie oraz resztę informacji? Jeśli nie i muszę wysyłać zdjęcia i resztę osobno, w jaki sposób mogę później uzyskać z bazy dane oraz pasujące do nich okładki? Planuję wyświetlać wszystkie książki na osobnej stronie. Jak powiązać okładkę z pasującymi danymi, jeśli będę chciał je sortować np. alfabetycznie po tytule? Umieszczam swój kod:
const upload = multer({
destination: uploadPath,
limits: { fileSize: 1000000 },
fileFilter: (req, file, callback) => {
callback(null, imageMimeTypes.includes(file.mimetype))
}
});
router.post('/library', upload.single('myCover'), async (req, res) => {
if(req.file === undefined) res.render('add', { msg: 'No File Selected!' });
const fileName = req.file != null ? req.file.filename : null;
const book = new Book({
title: req.body.title,
subtitle: req.body.subtitle,
author: req.body.author,
genre: req.body.genre,
publisher: req.body.publisher,
numberOfPages: req.body.numberOfPages,
rate: req.body.rate,
coverImageName: fileName
});
const img = fs.readFileSync(req.file.path);
const encodeImg = img.toString('base64');
const finalBookImg = {
contentType: req.file.mimetype,
path: req.file.path,
image: Buffer.from(encodeImg, 'base64')
};
db.collection('covers').insertOne(book, (err, res) => {
if (err) { console.log(err) }
else {
console.log('Cover saved');
}
});
db.collection('covers').insertOne(finalBookImg, (err, res) => {
if (err) { console.log(err) }
else {
console.log('Cover saved');
}
});
res.render('library', { books: book, files: finalBookImg });
});
finalBookImg to zdjęcie, które chcę przechowywać w bazie, a book to informacje o konkretnej książce.