繁体   English   中英

Express.js中的HTTP PUT请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM