[英]HTTP PUT request in Expressjs
我正在尝试使用expressjs中的项目(/ UpdateTodo /:id)的ID执行PUT请求,但是根据我的代码,我实际上在做的只是添加一组可以具有相同ID的新json。
以下是用于更好理解的代码:
app.put('/UpdateTodo/:id', function (req, res) {
var date = new Date();
var _id = 0;
if (todoList.length > 0) {
_id = todoList[todoList.length - 1].id + 1;
}
var dt = date.toLocaleString();
req.params.id = Number(req.params.id);
var todoitem = { id: req.params.id, item: req.body.item, createdTime: dt, completedTime: "", status: "new" };
todoList.push(todoitem);
res.send(todoitem);
});
我的app.post按预期工作:
app.post('/InsertTodo', function (req, res) {
var date = new Date();
var _id = 0;
if (todoList.length > 0) {
_id = todoList[todoList.length - 1].id + 1;
}
var dt = date.toLocaleString();
var todoitem = { id: _id, item: req.body.item, createdTime: dt, completedTime: "", status: "new" };
todoList.push(todoitem);
res.send(todoitem);
});
总而言之,我的问题是,如何根据ID更新项目,而不是添加可能具有相同ID的另一个项目?
您的PUT请求应尝试在更新之前找到具有相同ID的现有项目。 如果不存在,则应创建一个。
例如:
const item = todoList.find(item => item.id === req.params.id);
if (item) { ... }
与其使用数组存储项目( todoList
), todoList
考虑使用Map 。 进行Map.get()
和Map.set()
可能会使这成为一种有趣的学习体验。
另一个建议是,您的路线不必用不同的措词。 HTTP方法(PUT,POST等)将使它们唯一,因此,
app.put('/UpdateTodo
app.post('/InsertTodo
做就是了
app.put('/todo, function(req, res) { ... });
app.post('/todo, function(req, res) { ... });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.