在我开始之前,我很抱歉以任何方式描述这个问题 - 这节点的东西对我自己来说有点令人生畏。
我正在尝试通过创建具有CRUD功能的简单ToDo列表应用程序来学习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”
答案 0 :(得分:0)
在您的请求对象req
中,您可以访问从网址传递给您的参数。在这种情况下,您需要: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;
});
答案 1 :(得分:0)
我建议你为每个任务对象添加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,
});
});
希望这会帮助你!