【问题标题】:product is not added to my collection产品未添加到我的收藏中
【发布时间】:2017-02-06 22:00:12
【问题描述】:

在我的项目中,我有 2 个模型:商店和产品,基本上每个商店都可以有多个产品,但每个产品可以与 1 个商店相关,所以为了构建模型我这样做了:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var lojasSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    required: true
  },
  nome: {
    type: String,
    required: true,
    unique: true
  },
  descricao: {
    type: String,
    default: "No description for this store"
  },
  telefone:{
    type:String,
  },
  password:
  {
    type: String, required: true
  }
  ,
  img: {
    data: Buffer, contentType: String
  },
  imgNome: {
    type: String
  },
  produtos: [
    { type: mongoose.Schema.ObjectId, ref: 'Produto' }
  ],
});

module.exports = mongoose.model('Loja', lojasSchema);

我的产品是这样的

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var produtoSchema = mongoose.Schema({
    nome:{
        type:String, required:true
    },
    stock:{
        type:Number
    },
    descricao:{
        type:String
    },
    categoria:{
        type: String, required:true
    },
    tamanho:{
        type: String, required:true
    },
    data:{
        type: Date, default: Date.now
    },
    preco:{
        type: Number,required:true, default: 0
    }
});


 module.exports = mongoose.model('Produto',produtoSchema);

正如你们所看到的,我在商店方面有参考,基本上我想要的是每次我添加产品时,我直接将该产品添加到商店(storeID),所以我将它添加到我的商店支线:

//adiciona um produto a uma loja especifica
router.post('/:id/produtos',function(req,res){
    Loja.findById(req.params.id,function(err,loja){
      if(!loja){
        return res.status(404).json({Error:"Loja nao encontrada"});
      }

      if(JSON.stringify(req.body) == "{}")
      {
        return res.status(400).json({Error:"Your request is empty"});
      }

      var produto = new Produto(req.body);
      loja.produtos.push(produto);

      loja.save(function(err){
        if(err){
          return res.status(500).json({Error:"Server problem"});
        }
         res.status(200).json({message: "product added"});
      });
    })
})

我有两个问题:当我去我的获取产品路线时,我得到一个空数组,我应该把所有产品都放在那里,我认为产品没有被添加到产品的模型中,第二个问题是:每个当我将产品添加到我的商店并使用 .populate 查看我的所有商店时,我只能在 products 数组中看到一个 id,我应该看到所有产品详细信息,我做错了什么?:S

【问题讨论】:

    标签: node.js rest http express


    【解决方案1】:

    将您的 mongoose 更新到 4.8.1,因为 4.7.6 的转换 ID 存在问题。

    然后转到您的 lojas.js 并在顶部要求 mongoose。

    用这个替换你的代码

            router.post('/:id/produtos',function(req,res){
    
            var queryObject = {_id : mongoose.Types.ObjectId(req.params.id)};
            Loja.findById(queryObject,function(err,loja){
                    console.log(err);
              if(!loja){
                return res.status(404).json({Error:"Loja nao encontrada"});
              }
    
              if(JSON.stringify(req.body) == "{}")
              {
                return res.status(400).json({Error:"Your request is empty"});
              }
    
              var produto = new Produto(req.body);
              produto.save(function (err) {
                if(err){
                  return res.status(500).json({Error:"Server Problem"})
                }
                  loja.produtos.push(produto._id);
    
                 loja.save(function(err){
                if(err){
                  return res.status(500).json({Error:"Server problem"});
                }
                 res.status(200).json({message: "product added"});
              });
              });
    
            })
        })
    

    【讨论】:

    • 产品文档中仍然没有产品保存?
    • 对,现在不明白为什么:S,我可以把它添加到 github 上,然后你检查一下,这真的让我很沮丧 atm:S
    • 一定要把它添加到github
    • lojas.js 路线看那里
    • 没有代码只初始化 router.get('/',function(req,res){ });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多