我使用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);
});
});
},
非常感谢任何正确方向的推动。
答案 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);
})
});
},