无法使用Express JS发布到嵌套数组

时间:2018-06-30 15:04:12

标签: javascript reactjs express

这是我在这里的第一篇文章,所以请让我知道我的问题是否不完整,或者是否还有其他遗漏:)

我正在尝试向数据结构features中的数组发出POST请求:

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

const CategorySchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: 'users'
  },
  categoryname: {
    type: String,
    required: true
  },
  items: [
    {
      user: {
        type: Schema.Types.ObjectId,
        ref: 'users'
      },
      itemname: {
        type: String,
        required: true
      },
      features: [
        {
          user: {
            type: Schema.Types.ObjectId,
            ref: 'users'
          },
          firstfeature: {
            type: String
          },
         date: {
        type: Date,
        default: Date.now
      }
    },
    {
      user: {
        type: Schema.Types.ObjectId,
        ref: 'users'
      },
      secondfeature: {
        type: String
      },
      date: {
        type: Date,
        default: Date.now
      }
    }
  ],
  date: {
    type: Date,
    default: Date.now
  }
}
  ],
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = Category = mongoose.model('category', CategorySchema);

使用以下代码发布到items数组没有任何问题:

    router.post(
  '/item/:id',
  passport.authenticate('jwt', { session: false }),
  (req, res) => {
    const { errors, isValid } = validateItemInput(req.body);

    // Check Validation
    if (!isValid) {
      // if any errors, send 400 with erros object
      return res.status(400).json(errors);
    }

    Category.findById(req.params.id)
      .then(category => {
        const newItem = {
          itemname: req.body.itemname,
          user: req.user.id
        };

        // Add to item array
        category.items.unshift(newItem);

        // Save
        category.save().then(category => res.json(category));
      })
      .catch(err =>
        res.status(404).json({ categorynotfound: 'No category found' })
      );
  }
    );

但是我无法弄清楚为向features数组添加数据而需要在此处进行的更改:

    router.post(
  '/feature/:id/:item_id',
  passport.authenticate('jwt', { session: false }),
  (req, res) => {
    Category.findById(req.params.id)
      .then(category => {
        const newFeature = {
          firstfeature: req.body.firstfeature,
          secondfeature: req.body.secondfeature,
          user: req.user.id
        };

        // Add to item array
        category.items.features.unshift(newFeature);

        // Save
        category.save().then(category => res.json(category));
      })
      .catch(err => res.status(404).json({ itemnotfound: 'Item not found' 
}));
  }
    );

1 个答案:

答案 0 :(得分:0)

问题通过以下数据结构解决:

features: [
    {
      user: {
        type: Schema.Types.ObjectId,
        ref: 'users'
      },
      price: {
        type: String
      },
      size: {
        type: String
      },
     date: {
    type: Date,
    default: Date.now
      }
    }
  ]

然后只需一次发布一项功能的发布请求。