Search code examples
javascriptsails.jswaterline

Having issues editing an existing DB entry with Sails and Waterline


I'm using SailsJS as an API with Waterline connected to a MongoDB. I'm trying to put together an endpoint to edit existing DB entries but can't seem to get it to work and I'm hitting a wall as to why.

My route:

'post /edit/safety/:id': {
controller: 'SafetyController',
action: 'editSafety'
},

My controller function:

editSafety: function editSafety(req, res) {
 var id = req.params.id;
 Safety.findOneById(id).then((err, safety) => {
  if (err) {
    res.send(500, err);
    return;
  }
  if (!safety) {
    res.send(404, err);
    return;
  }
  safety.title = req.body.title;
  safety.description = req.body.description;
  safety.status = req.body.status;
  safety.save((err, updatedSafety) => {
    if (err) {
      re.send(500, err);
      return;
    }
    res.send(200, updatedSafety);
  });
 });
},

Any push in the right direction would be greatly appreciated.


Solution

  • Looks like the main issue was transposing the response and err objects. It was successfully completing the query, but loading it into the err object which gets caught and a 500 error is thrown. So I changed that and simplified in a few other places.

    editSafety: function editSafety(req, res) {
     var id = req.params.id;
     Safety.findOne(id).then((response, err) => {
      var safety = response;
      if (err) {
        res.send(500, err);
        return;
      }
      if (!response) {
        res.send(404, err);
        return;
      }
      safety.title = req.body.title;
      safety.description = req.body.description;
      safety.status = req.body.status;
      Safety.update({
          id: id
        }, safety)
        .then((result) => {
          res.json(200, 'Ok!');
        })
        .catch((err) => {
          sails.log.error('SafetyController.editSafety', err);
        })
     });
    },