2017-02-13 2 views
0

Я создаю новый продукт, после его сохранения я перехожу к поиску его с помощью mongoose findById, а затем я попытаюсь создать другой документ " Изображение ", которое указано в схеме продукта. Когда я выполняю код, он дает мне TypeError: image.save is not a function. Как мне это исправить?TypeError: image.save не является функцией при создании нового документа с mongoose и выражением

Product.create(req.body.product, function(err, product) { 
     if (err) { 
      console.log(err); 
     } else { 
      product.save(); 
      Product.findById(product._id, function(err, foundProduct) { 
       if (err) { 
        req.flash('error', err.message); 
        res.redirect('/product'); 
       } else { 
        Image.create(req.files, function(err, image) { 
         if (err) { 
          req.flash('error', err.message); 
          res.redirect('/product'); 
         } else { 
          image.save(); 
          foundProduct.images.push(image); 
          foundProduct.save(); 
          res.redirect('/product/' + product._id); 
         } 
        }); 
       } 
      }); 
     } 
    }); 

Это мои схемы:

var productSchema = new mongoose.Schema({ 
    name: String, 
    price: String, 
    description: String, 
    gender: String, 
    images: [{ 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "Image" 
    }], 
    sizes: { 
     ch: Number, 
     m: Number, 
     g: Number, 
     eg: Number 
    }, 
    type: String, 
    likes: Number, default: 0 
}); 


var imageSchema = new mongoose.Schema({ 
    public_id: String, 
    url: String, 
    secure_url: String, 
    resource_type: String, 
    format: String, 
    bytes: String 
}); 

ответ

0

Вы не должны объявить изображение как новый объект схемы ImageSchema? Мне кажется, что вы не создали объект.

Внутри вашей функции я хотел бы сделать следующее:

const im = new Image(); 
im.url = ... 

Тогда я хотел бы сделать вызов для функции сохранения.

im.save().then((data,error) => {...}) 
+0

Спасибо, что мне очень помогло! Любые предложения о том, почему метод .create не работал в этом случае? У меня есть другие части кода, где он работает как шарм. – tFranzoni

+0

Чтобы быть честным с вами, я никогда не использовал эту функцию .create. Функция .save всегда была основным способом сохранения документов в db. Но, я посмотрел его онлайн, и похоже, что это создание - это более общие функции для сохранения объектов (что необязательно должно быть экземпляром модели). В то время как в .save объект должен быть создан (как я сделал с «новым изображением()»). У меня никогда не было проблем с сохранением, поэтому я считаю, что у вас не будет проблем, если вы будете использовать его только. http://stackoverflow.com/questions/38290684/mongoose-save-vs-insert-vs-create http://mongoosejs.com/docs/api.html –