Невозможно установить свойство imgId для неопределенного - PullRequest
0 голосов
/ 18 октября 2018

Я новичок в node.js и пытаюсь сохранить фотографии пользователей в mongodb.

Вот маршрутизатор:

  router.post('/addphoto',  checkAuth, upload.single('image'), (req, res)=> {

   let filename = Math.floor(Math.random() * 100000)
   console.log('imgId is', filename  );

      const photoFields = {};
      photoFields.photos = []
    if(req.file) photoFields.image = req.file.path ;
    photoFields.user = req.user.id; 

    Photo.findOne({ _id: req.user.id }).then(photo => {
          if(photo) {
        //Update

        console.log('photo found! \n\n');
        Photo.findOneAndUpdate(
          {user: req.user.id},
          {$set: photoFields},
          {new: true}
          ).then(photo => res.json(photo));
      } else {
        console.log('No photo found! \n\n');
        //Create
        photoFields.photos[0].imgId =  filename  ;
        photoFields.photos[0].isProfileImg =  true  ;
        photoFields.photos[0].visible = 'all';


        //Save
        new Photo(photoFields).save().then(photo=> {
            res.json(photo);
        }).catch(err => {
              console.log('could not save photo \n\n');
              console.log(err);
        }

      );
  }
    }) 
  });

Каждый пользователь может загрузить несколько фотографий, так что вотсхема фото, в которой фотографии представляют собой массив объектов:

  const PhotoSchema = new Schema({

    user: {
      type: Schema.Types.ObjectId,
      ref: 'users'
    }, 

  photos: [
    {
      imgId: {
        type: Number,
      },
      isProfileImg: {
        type: Boolean,
        default: true,
      },
      visible: {
        type: String,
      }
    }
  ]

});

Как видите, я создаю imgId с использованием случайной функции и вижу, что она создана:

imgId is 65609

Тем не менее, я все еще получаю эту ошибку в консоли:

(node:5295) UnhandledPromiseRejectionWarning: TypeError: Cannot set property 'imgId' of undefined

И изображение не сохраняется.

Я использую multer для извлечения файла из сообщения запроса и могу установить в консоли, что файл принимается.

Я ценю ваши подсказки, чтобы исправить эту ошибку, которая беспокоит меня часами.

1 Ответ

0 голосов
/ 18 октября 2018

Вы устанавливаете imgId в одном месте, в предложении else, где фотография не найдена, в операторе

photoFields.photos[0].imgId = filename ;

Список photoFields.photos пуст, поэтому первый элемент photoFields.photos[0]is undefined.

Сделайте что-то подобное вместо этого.

photoFields.photos.push({
    imgId: filename,
    isProfileImg: true,
    visible: 'all',
})
...