fullstackopen-notes/parts/3/followAlong/index.js

70 lines
1.5 KiB
JavaScript

const express = require("express");
const app = express();
app.use(express.json());
let notes = [
{ id: "1", content: "HTML is easy", important: true },
{ id: "2", content: "Browser can execute only JavaScript", important: false },
{
id: "3",
content: "GET and POST are the most important methods of HTTP protocol",
important: true,
},
];
const generateId = () => {
const maxId =
notes.length > 0 ? Math.max(...notes.map((n) => Number(n.id))) : 0;
return String(maxId + 1);
};
app.get("/", (request, response) => {
response.send("<h1>Hello World!</h1>");
});
app.get("/api/notes", (request, response) => {
response.json(notes);
});
app.post("/api/notes", (request, response) => {
const body = request.body;
if (!body.content) {
return response.status(400).json({
error: "content missing",
});
}
const note = {
content: body.content,
important: body.important || false,
id: generateId(),
};
notes = notes.concat(note);
response.json(note);
});
app.get("/api/notes/:id", (request, response) => {
const id = request.params.id;
const note = notes.find((note) => note.id === id);
if (note) {
response.json(note);
} else {
response.status(404).end();
}
});
app.delete("/api/notes/:id", (request, response) => {
const id = request.params.id;
notes = notes.filter((note) => note.id !== id);
response.status(204).end();
});
const PORT = 3001;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});