# 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');
}
});
});
```