Экспресс / мангуста всегда обновляет один и тот же элемент - PullRequest
0 голосов
/ 28 декабря 2018

У меня проблема с тем, что если я пытаюсь обновить или создать новый элемент, он создает только 1 элемент, а затем просто обновляет этот элемент, независимо от того, что я делаю, что-то не так с этим маршрутом?

// @route   POST api/item
// @desc    Create/Edit item
// @access  Private
router.post(
  "/",
  passport.authenticate("jwt", { session: false }),
  (req, res) => {
    const itemFields = {};
    const { errors, isValid } = validateItemInput(req.body);

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

    if (req.body.name) itemFields.name = req.body.name;
    if (req.body.component) itemFields.component = req.body.component;
    if (req.body.parameter) itemFields.parameter = req.body.parameter;
    if (req.body.severity) itemFields.severity = req.body.severity;
    if (req.body.description) itemFields.description = req.body.description;
    if (req.body.recomendation)
      itemFields.recomendation = req.body.recomendation;
    if (req.body.resources) itemFields.resources = req.body.resources;

    Item.findOne({ item: req.params._id }).then(item => {
      if (item) {
        // Update
        Item.findOneAndUpdate(
          { item: req.params._id },
          { $set: itemFields },
          { new: true }
        ).then(item => res.json(item));
      } else {
        // Create
        // Save Item
        new Item(itemFields).save().then(item => res.json(item));
      }
    });
  }
);

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Похоже, у вас нет никакого параметра в маршруте. Для использования параметра типа req.params._id, ваш маршрут должен быть определен как

router.post("/:_id",() =>{
//access req.params._id here
res.end() 
});

, чтобы передать значение для req.params._id, вынужно набрать следующий POST url yoursite.com/21, где 21 - это req.params._id

https://expressjs.com/en/api.html

0 голосов
/ 28 декабря 2018

Вы устанавливаете элемент в req.param.id, который устанавливает содержимое нового элемента в более старый элемент, если вы даете идентификатор более старого элемента, поэтому измените его

Item.findOneAndUpdate(
          { item: req.params._id },
          { $set: itemFields },
          { new: true }
        ).then(item => res.json(item));
      } else {
        // Create
        // Save Item
        new Item(itemFields).save().then(item => res.json(item));
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...