Не удается POST для вложенного массива с экспресс-JS - PullRequest
0 голосов
/ 30 июня 2018

Это мой первый пост здесь, поэтому, пожалуйста, дайте мне знать, если есть что-то неполное в моем вопросе, или если что-то не хватает:)

Я пытаюсь сделать POST-запрос к массиву в моей структуре данных с именем features:

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);

У меня нет проблем с отправкой в ​​массив элементов со следующим кодом:

    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 голосов
/ 12 июля 2018

Проблема решена со следующей структурой данных:

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

А затем просто сделайте запрос на публикацию по одной функции за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...