public paste
hruPVd5bV9
—9 views3,341 chars3.26 KB
stdout
Paste content
const express = require('express');
const cors = require('cors');
const app = express();
let tasks = [];
let currentId = 1;
app.use(cors());
app.use(express.json());
app.use(express.static('public'));
// Get all tasks
app.get('/api/tasks', (req, res) => {
res.json(tasks);
});
// Create task
app.post('/api/tasks', (req, res) => {
const task = {
id: currentId++,
title: req.body.title
};
tasks.push(task);
res.status(201).json(task);
});
// Update task
app.put('/api/tasks/:id', (req, res) => {
const id = parseInt(req.params.id);
const task = tasks.find(t => t.id === id);
if (!task) {
return res.status(404).json({
message: "Task not found"
});
}
task.title = req.body.title;
res.json(task);
});
// Delete task
app.delete('/api/tasks/:id', (req, res) => {
const id = parseInt(req.params.id);
tasks = tasks.filter(t => t.id !== id);
res.status(204).send();
});
// Server
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}`);
});
const taskForm = document.getElementById("task-form");
const taskInput = document.getElementById("task-input");
const taskList = document.getElementById("task-list");
const API_URL = "/api/tasks";
// Read Tasks
async function fetchTasks(){
const res = await fetch(API_URL);
const tasks = await res.json();
taskList.innerHTML = "";
tasks.forEach(addTaskToDOM);
}
// Display Task
function addTaskToDOM(task){
const li = document.createElement("li");
li.textContent = task.title + " ";
// Edit Button
const editBtn = document.createElement("button");
editBtn.textContent = "Edit";
editBtn.onclick = async ()=>{
const newTitle = prompt("Edit Task",task.title);
if(newTitle){
await fetch(`${API_URL}/${task.id}`,{
method:"PUT",
headers:{
"Content-Type":"application/json"
},
body:JSON.stringify({
title:newTitle
})
});
fetchTasks();
}
};
// Delete Button
const deleteBtn = document.createElement("button");
deleteBtn.textContent = "Delete";
deleteBtn.onclick = async()=>{
await fetch(`${API_URL}/${task.id}`,{
method:"DELETE"
});
fetchTasks();
};
li.appendChild(editBtn);
li.appendChild(deleteBtn);
taskList.appendChild(li);
}
// Add Task
taskForm.onsubmit = async(e)=>{
e.preventDefault();
const title = taskInput.value.trim();
if(title==="") return;
await fetch(API_URL,{
method:"POST",
headers:{
"Content-Type":"application/json"
},
body:JSON.stringify({
title:title
})
});
taskInput.value="";
fetchTasks();
};
// Load Tasks
fetchTasks();
$ tail -f comments.log
Comments [1]
AAnonymous—
notes