使用 Sails 和 Waterline 编辑现有数据库条目时遇到问题

Having issues editing an existing DB entry with Sails and Waterline

我将 SailsJS 用作 API,Waterline 连接到 MongoDB。我正在尝试将一个端点放在一起来编辑现有的数据库条目,但似乎无法使其正常工作,我在寻找原因时遇到了瓶颈。

我的路线:

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

我的控制器功能:

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

任何正确方向的推动都将不胜感激。

我不认识 Safety.findOneById 方法 - 这是您定制的东西吗?如果不是,那可能是你的问题。

尝试将其交换为:

Safety.findOne(id)

Safety.findOne({id: id})

请注意,如果记录存在,返回的对象将是一个模型实例,否则 undefined。如果您决定使用 Safety.find,那么返回值将是一个包含所有匹配查询的模型的数组。

看起来主要问题是转置响应和错误对象。它已成功完成查询,但将其加载到 err 对象中,该对象被捕获并抛出 500 错误。所以我更改了它并在其他几个地方进行了简化。

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