![](/img/trans.png)
[英]Java how to update a JSON object value and send it as a body to PUT request
[英]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.