2017-08-11 32 views
0

我正在开发RESTful API。
型号如何将值数组绑定到nodeJs模型?

var productsSchema = new Schema({ 
     productName:{type: String, required: true}, 
     productDescription: {type: String, required: true}, 
     produtThumbnail:{type: String}, 
     productStock: [ 
     { 
      size: {type: Number, required: false}, 
      price: {type: Number, required: false} 
    }], 
    productTags:[{ 
      tag: {type: String, required: false} 
     }] 
}); 


POST方法

router.post('/api/new-product',upload.any(),function(req, res, next){ 

    console.log(req.body); 
    if(req.files){ 
    req.files.forEach(function(file){ 

     var filename = (new Date()).valueOf() + '-' + file.originalname; 
     fs.rename(file.path,'public/images/'+ filename, function(err){ 
     if (err) throw err; 
     console.log('file Uploaded'); 
     //Save to mongoose 
     var product = new Products({ 
      productName: req.body.productName, 
      productDescription: req.body.productDescription, 
      size: req.body.productStock.size, 
      productThumbnail: filename 
     }); 
     product.save(function(err, result){ 
      if(err){} 
      res.json(result); 
     }); 
     }); 
    }); 
    } 
}) <br/> 

问题: 我能够对象数据绑定到模型,但我不知道如何绑定数组数据模型。
例如

var product = new Products({ 
      productName: req.body.productName, 
      productDescription: req.body.productDescription, 
      size: req.body.productStock.size,// This line doesn't work 
      productThumbnail: filename 
     }); 

size:req.body.productStock不起作用
所以,我怎样才能阵列的数据绑定到模型,然后将其保存到MongoDB的?
请帮助..

+0

在你的猫鼬中,'required:false'是默认的,因此你不需要添加这些。另外,如果这是唯一需要存储 –

+0

'required:false'的属性,则不需要在对象中包装“标签”,这意味着即使我跳过此字段,我的服务器也不会抛出任何错误,但我希望在数据库中也保存这个字段值。 –

+0

但是'required:false'是默认的,对吧? –

回答

0

只要改变它输入数组

var productsSchema = new Schema({ 
     merchantId: {type: String, required: false}, 
     produtThumbnai:{type: String}, 
     productStock: {type: Array}, 
    productTags:{type: Array} 
}); 

它的作品!

+0

仍然无效。 :( –

0

也许这只是因为错字,因为你的模式看起来不错。更改此:

var product = new Products({ 
    // ... 
    size: req.body.productStock.size, 
    // ... 
}); 

要这样:

var product = new Products({ 
    // ... 
    productStock: req.body.productStock, 
    // ... 
}); 

对于这个工作你应该通过你的productStock作为一个对象从POST请求数组

否则,它(!)有点难以为您提供更多的帮助,因为我们并不知道真正的需求。


编辑

要检查上述作品(假设你逝去的productStock从邮差/曲/不管对象的整个阵列),请执行下列操作,结果贴在这里:

product.productStock.foreach((product, idx) => console.log(`(${idx}):${product.id}, `)) 
+0

'product.productStock.foreach(产品=>的console.log(product.id))',输出:(567897e667799) –

+0

** req.body **: '{productStock:“[对象的对象],[目标对象]”, 产品名称:‘新名字’, 产品描述:‘asdfasdfasdfasdfasdf’, otherProductAttributes:‘?[对象的对象]’} ' –

+0

所以它是工作,现在右请检查我的新的编辑部分,并给我 –

相关问题