Как вы храните URI-интерфейс изображения переднего плана в MongoDB? - PullRequest
0 голосов
/ 07 февраля 2020

Каков оптимальный способ взять 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(); 
}

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...