簡體   English   中英

如何通過PUT請求更新JSON對象/數組?

[英]How to update JSON object/array via PUT request?

在開始之前,無論以什么方式描述這個問題,我都感到很抱歉-Node方面的內容對我自己來說有點令人生畏。

我正在嘗試通過制作具有CRUD功能的簡單的待辦事項列表應用程序來學習Node。

我已經能夠實現應用程序的創建和刪除功能,只是無法弄清楚如何在該對象內將某個任務更新為“完成”:

  var data = [
  {
    task: 'Go to shop',
    date: 'Friday Nov 24 2017',
    completed: 1
  },
  {
    task: 'Complete this assignment',
    date: 'Sunday Nov 26 2017',
    completed: 0
  },
  {
    task: 'Give up on NodeJS',
    date: 'Tue Nov 28 2017',
    completed: 1
  }
]

這是我打算使用的控制器:

app.put('/tasks/:task', function(req, res){
// can't figure out what to put in here
});

與此AJAX請求一起

$('.completed').on('click',  function(){
    var item = $(this).parents('li').find('p');
    var completed = {completed: 1};
    $.ajax({
      type: 'PUT',
      url: '/tasks/' + item,
      data: completed,
      success: function(data){
        location.reload();
      }
    })
  })

盡管單擊該按鈕后,該功能只是將所有任務更新為“ completed / 1”,但我還是可以使它工作的

在您的請求對象, req您可以訪問傳遞給你從URL的參數。 在這種情況下,您需要:task參數,該參數代表data數組中目標對象的索引。 然后,您更改該對象的完成狀態。

例如:

app.put('/tasks/:task', function(req, res){
   data[params['task']]['completed'] = req.data.completed;
});

也許更清楚:

app.put('/tasks/:task', function(req, res){
   let taskIndex = params['task'];
   let targetTask = data[taskIndex];
   let postedStatus = req.data.completed;

   targetTask.completed = postedStatus;
});

我建議您向每個任務對象添加ID鍵。 通常,id是唯一的,因此在從一系列數據對象中查詢某個對象時可以使用它。

{
  id: 1,
  task: "Now the task has a unique id",
  completed: 0
}

然后,您可以在API網址上使用ID,例如/tasks/:taskId ,而不使用任務字符串。

您的PUT路由偵聽器如下所示,然后

app.put("/tasks/:taskId", (req, res, next)=>{
  data.forEach(ele=>{
    if (ele.id === req.params.taskId) ele.completed = 1;
  });
  res.json({// if you will feedback your changed data to the source.
    message: "Completed a task!",
    data: data,
  });
});

希望這對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM