Как проверить, что у пользователя уже есть 4 изображения в массиве и не дать перейти к следующему шагу в Node.js Express? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь установить предел количества изображений. Дело в том, что я уже установил его в Mongoose, но поскольку изображения загружаются в облако, я думаю, что что-то должно быть добавлено перед загрузкой, и сначала проверьте, не меньше ли длина массива изображений, чем 4. Вот код .

Mongoose

const userSchema = new mongoose.Schema({
  username: { type: String },
  email: { type: String },
  isVerified: { type: Boolean, default: false },
  picVersion: { type: String, default: '1531305955' },
  picId: { type: String, default: 'default.png' },
  images: {
    type:[{
      imgId: { type: String, default: '' },
      imgVersion: { type: String, default: '' }
    }],
    validate: [arrayLimit, 'You can upload only 4 images']
  },
  city: { type: String, default: '' },
});


function arrayLimit(val) {
  return val.length <= 4;
}

контроллер

 UploadImage(req, res) {

 // check if images array length is <== 4 and then let bellow function

    cloudinary.uploader.upload(req.body.image, async result => {
      await User.update(
        {
          _id: req.user._id
        },
        {
          $push: {
            images: {
              imgId: result.public_id,
              imgVersion: result.version
            }
          }
        }
      )
        .then(() =>
          res
            .status(HttpStatus.OK)
            .json({ message: 'Image uploaded successfully' })
        )
        .catch(err =>
          res
            .status(HttpStatus.INTERNAL_SERVER_ERROR)
            .json({ message: 'Error uploading image' })
        );
    });
  },

Что я должен добавить до cloudinary.uploader.upload(req.body.image, async result => { для проверки сначала?

1 Ответ

0 голосов
/ 18 января 2019

ну, вы можете изменить способ обновления. Я предлагаю вам использовать findOne (), а затем использовать update вашего пользователя, потому что при этом вы имеете больший контроль над обновлением, чем просто с помощью update .. поэтому здесь попробуйте вот так

UploadImage(req, res) {
User.findOne({ _id: req.user._id })
.then((user) => {
    if (user) {
        if (user.images.type.length <= 4) {
            cloudinary.uploader.upload(req.body.image, async result => {
                user.image.type.push({ imgId: result.public_id, imgVersion: result.version });
                user.save()
                    .then(res.status(HttpStatus.OK).json({ message: 'Image uploaded successfully' }))
                    .catch(); //use callback inside save() or use it like promise
            });

        }
    } else { res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ message: 'Error uploading image' }); }
})
.catch(err => res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ message: 'Error uploading image' }));

}

делая это, вы можете достичь того, что ищете .. ура :) 1006 *

...