Каков оптимальный способ взять request.body из запроса на патч, который содержит образ uri, и сохранить его в MongoDB?
Для контекста, у меня в настоящее время есть приложение реагировать / экспо, где я могу взять объект меню, такой как:
{vendorId: 1234
vendorName: "Some Name",
currentMenu: {id:1,
menuItem:[{itemName:"pasta", itemImage: pastaImage},{itemName:"burger", itemImage: burgerImage}] }
}
В этом примере выше, pastaImage или burgerImage - изображения, которые поставщик выбирает из их фото-библиотеки или фотоаппарата. Как только продавец выберет изображение, URI будет получен через expo-image-picker
библиотечную функцию launchImageLibraryAsync()
.
Как только текущие данные меню будут заполнены в моем приложении переднего плана и выбрано изображение, продавец нажимает кнопку сохранения. Нажмите кнопку, которую я использую методом исправления ax ios, чтобы найти продавца в моей базе данных на MongoDB и сохранить текущие данные меню.
export const updateVendorDetails = async (vendorID, menuItem) => {
url = `http://${localHost}:${mongoDBPort}/vendors/${vendorID}`;
axios({
method: "PATCH",
url,
data: { currentMenu: { menuItem: menuItem} },
headers: { "Content-Type": "application/json" }
})
.then(res => {
return res.data[0];
})
.catch(err => {
return err.message;
});
};
Эта часть работает как задумано. Я могу видеть данные, отраженные правильно на моей БД. Вот где я заблудился, и я мог бы использовать некоторые рекомендации.
Как только изображение отправляется на мой express серверный маршрут через патч, каков наилучший способ сохранить изображение в предпочтительном формате в MongoDB, чтобы разные пользователи могли видеть изображения, когда они открывали меню поставщика ?
Я читал, что Multer можно использовать для создания хранилища на вашем внутреннем сервере в папке, где вы можете создавать имена файлов, а затем преобразовывать изображение в другой формат, используя данные формы multi / part, но меня смущает то, как это работает. Если я использую multer, нужно ли мне создавать функцию промежуточного программного обеспечения, которая идет после того, что показано ниже, чтобы проверить URI изображения и преобразовать в предпочтительный формат изображения MongoDB.
Я также использую объекты mon goose .shema для всех моих данных mongoDB, поэтому мне нужно также изменить тип схемы моего изображения с объекта на буфер или что-то еще?
Схема пункта меню
const menuSchema = new mongoose.Schema({
storageDate: { type: Date, required: true, default: Date.now },
menuItem: [menuItem]
});
const menuItem = new mongoose.Schema({
storageDate: { type: Date, required: true, default: Date.now },
itemName: { type: String },
image: { type: Object }
});
Вот моя функция патча в бэкэнде вместе с функцией промежуточного программного обеспечения getVendorbyID:
router.patch("/:id", getVendorbyID, async (req, res) => {
if (req.body) {
res.vendor.currentMenu.push(req.body.currentMenu);
}
try {
const updatedVendor = await res.vendor.save();
res.json(updatedVendor);
} catch (error) {
res.status(400).json({ message: error.message });
}
});
async function getVendorbyID(req, res, next) {
let vendor;
try {
vendor = await Vendor.findById(req.params.id);
if (vendor == null) {
return res.status(404).json({ message: "Cannot find vendor" });
}
} catch (error) {
return res.status(500).json({ message: error.message });
}
res.vendor = vendor;
next();
}
Спасибо