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

时间:2018-04-02 20:49:31

标签: javascript sails.js 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);
  });
 });
},

非常感谢任何正确方向的推动。

2 个答案:

答案 0 :(得分:0)

我不认识Safety.findOneById方法 - 这是你定制的吗?如果没有,那么很可能是你的问题。

尝试将其换成:

Safety.findOne(id)

Safety.findOne({id: id})

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

答案 1 :(得分:0)

看起来主要问题是转置响应和错误对象。它成功完成了查询,但是将其加载到被捕获的错误对象中并引发了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);
    })
 });
},