# Instuderingsfrågor Webbserverprogrammering ### Javascript och Node.JS * Förklara vad npm är och vad npm har för syfte. * Hur skapar man ett npm-projekt? * Vad är skillnaden mellan `var`, `let` och `const` i JavaScript? * Vad är en callback i JavaScript, och varför används de? * Beskriv ett exempel där vi har använt callbacks, till exempel när vi har använt express eller http-modulen. * Förklara vad ett objekt är i Javascript och ge ett exempel på hur man skapar ett. ### SQL och databaser * Förklara vad följande queries används till i SQL: * SELECT * INSERT * DELETE * UPDATE * Vad gör följande SQL-query? ``` SELECT name, age FROM users WHERE age > 30; ``` * Vad är syftet med en primärnyckel (Primary Key) i en tabell? * Vad betyder det att normalisera en databas och varför vill man göra det? * Beskriv vad det innebär att en databas följer tredje normalformen (3NF). ### Express och HTTP * Förklara följande begrepp: * Klient, * server, * request, * response, * port, * HTTP-metod/verb, * url, * route, * body, * header, * query-strings * responskoder * Hur definierar du routes med hjälp av express? * Vad är syftet med HTTP-verb? * Förklara hur en query-string är uppbyggd och vad den används till. * Beskriv vad request- och response-argumenten är för något när vi definierar en route med hjälp av express. Utifrån följand kod, svara på frågorna: * Vad gör app.use(express.json()) på rad 4? * Vad händer om klienten skickar följande JSON i request body till /submit: * Vad händer om klienten inte skickar name eller age i body? ```javascript const express = require('express'); const app = express(); app.use(express.json()); app.post('/submit', (req, res) => { const { name, age } = req.body; if (!name || !age) { res.status(400).send('Name and age are required'); } else { res.send(`Received data: Name - ${name}, Age - ${age}`); } }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` ### mysql2 * Vad är skillnaden mellan .query() och .execute()? * Vad är en SQL-injektion och hur kan man skydda sig mot det? Utifrån följand kod, svara på frågorna: * Vad är syftet med ? i query-strängen? * Vad måste du lägga till i din kod för att req.body ska fungera korrekt? ```javascript app.post('/add-user', (req, res) => { const { name, email } = req.body; const query = 'INSERT INTO users (name, email) VALUES (?, ?)'; db.execute(query, [name, email], (err, results) => { if (err) { res.status(500).send('Error inserting user'); } else { res.send('User added successfully'); } }); }); ```