сохранение изображений в mongodb с использованием multer - PullRequest
0 голосов
/ 01 августа 2020

Привет, ребята, я создаю веб-сайт электронной коммерции, но у меня возникли проблемы с настройкой моей схемы mon go db для соответствия изображениям. моя схема

user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'user'
  },
  title: {
    type: String,
    required: true
  },
  subtitle: {
    type: String
  },
  productImages: [
    {
      img: {
        data: Buffer,
        contentType: String
      }
    }
  ],
  details: {
    modelNumber: {
      type: String
    },
    releaseDate: {
      type: Date
    },
    brandName: {
      type: String,
      required: true
    },
    countryOrigin: {
      type: String
    },
    size: {
      type: String
    },
    features: {
      type: [String]
    },
    color: {
      type: String,
      required: true
    }
  }

Я хочу, чтобы изображения продукта были массивом изображений, чтобы я мог легко l oop через него и позже поместить его в карусель, чтобы отреагировать, но у меня проблемы с его сохранением с multer мой код multer

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    const dir = './uploads';

    // create uploads
    if (!fs.existsSync(dir)) {
      fs.mkdirSync(dir);
    }

    cb(null, dir);
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname);
  }
});

const fileFilter = (req, file, cb) => {
  // only accept jpeg files or jpg files
  if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/jpg') {
    cb(null, true);
  } else {
    return cb(
      res
        .status(400)
        .json({ errors: [{ msg: '*only jpg and jpeg are allowed' }] })
    );
  }
};

// give a destination multer should save the files, (accept only files smaller than 10mb)
let upload = multer({
  storage,
  limits: {
    fileSize: 1024 * 1024 * 10
  },
  fileFilter
});

router.post("/api/products", upload.array("productImages", 5), async(req, res)=>{

try{

const product = new Product({
title: req.body.title,
subtitle: req.body.subtitle,
productImages: req.files,
//rest of product data

})

}catch(err){
//error handling
}

})

с этим продукт сохраняет в базе данных, но я получаю только поле _id, может ли кто-нибудь показать мне лучший способ сохранить несколько изображений в базе данных в один раз. потому что, когда я регистрирую файлы req.files, я получаю

[
 {
  fieldname: 'productImages',
   originalname: 'picture1.jpg',
   encoding: '7bit',
   mimetype: 'image/jpeg',
    destination: './uploads',
 filename: '1596264413208-picture1.jpg',
   path: 'uploads\\1596264413208-picture1.jpg',
   size: 61927
  }
 ]

, так как я могу настроить свою базу данных в соответствии с этими данными.

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