Как исправить маршрут PUT, обновляющий идентификатор, отличный от того, который был отправлен в nodeJS - PullRequest
0 голосов
/ 09 января 2019

Объект обновления маршрута PUT с неверным идентификатором.

Я попытался изменить значение с params.id на body.id, но оно все равно не изменило вывод. Он обновляет, но обновляет только первый созданный объект, который не соответствует отправленному идентификатору.

app.put('/:id', jsonParser, (req, res) => {
 const requiredFields = ['destination', 'when', 'lastDayOfTrip'];
  for (let i=0; i<requiredFields.length; i++) {
    const field = requiredFields[i];
    if (!(field in req.body)) {
    const message = `Missing \`${field}\` in request body`
    console.error(message);
    return res.status(400).send(message);
    }
 }

    if (req.params.id !== req.body.id) {
     const message = `Request path id (${req.body.id}) and request 
     body id (${req.body.id}) must match`;
     console.error(message);
     return res.status(400).send(message);
     }

 TripPost
 .update({
    id: req.params.id,
    destination: req.body.destination,
    when: req.body.when,
    lastDayOfTrip: req.body.lastDayOfTrip
 })
 .catch( err => res.status(500).json({ message: 'Something went 
  wrong'}));
 console.log(TripPost)
 res.status(204).end();
 }); 

Предполагается, что маршрут PUT обновляет объект с соответствующим идентификатором. Вместо этого обновляется только первый созданный объект, даже если это не идентификатор, который был отправлен.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Мне удалось исправить это так:

 if (!(req.params.id && req.body.id && req.params.id === req.body.id)) {
        res.status(400).json({
          error: 'Request path id and request body id values must match'
        });
    }

    const updated = {};
    const updateableFields = ['destination', 'when', 'lastDayOfTrip', 
    'tripDetails'];
    updateableFields.forEach(field => {
        if (field in req.body) {
          updated[field] = req.body[field];
        }
    });

    TripPost
        .findByIdAndUpdate(req.params.id, { $set: updated }, { new: true })
        .then(TripPost => res.status(204).end())
        .catch(err => res.status(500).json({ message: 'Something went wrong' 
         }));
        res.status(204).end();
0 голосов
/ 09 января 2019
  Please revise your query, update function require two objects, 
 first object is conditional object and the second object should data to be updated.   
 TripPost
 .update({

    _id: req.params.id,     // Please change id to _id in update query
   },
    {
 $set: {   
    destination: req.body.destination,
    when: req.body.when,
    lastDayOfTrip: req.body.lastDayOfTrip
   }
  }})
 .then(tripData=> {
     console.log(tripData) 
      res.status(200).json({ data: tripData}));
   })
 .catch( err => 
   res.status(500).json({ message: 'Something went wrong'}));
 }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...