---
# System prepended metadata

title: Instuderingsfrågor Webbserverprogrammering
tags: [övningsuppgifter]

---

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

```