# Guide Express
Express är ett node-paket som hjälper oss att bygga webbservrar genom att enkelt låta oss definiera *routes*. En route är ett svar på en klients request utifrån http-metod (GET, POST, PUT, DELETE) och URL.
### 1. Installera Express
För att kunna använda express behöver vi installera det som ett NPM-paket. Det gör vi genom att först skapa ett nytt NPM-projekt:
1. Skapa en ny mapp för ditt projekt
2. I terminalen skriv: `npm init`
3. Gå igenom guiden och svara på frågorna. Alternativt skriver du `npm init -y` för att skapa projektet med default inställningar.
4. Installera express: `npm install express`.
### 2. Starta servern
När du har installerat express i ditt projekt kan du sätta upp en express server i tre steg.
1. Importera paket: `const express = require("express");`
2. Skapa en instans av expres-servern: `const app = express();`
3. Lyssna på en port: `app.listen(8080);`
### 3. Definiera routes
Nu kan vi definiera olika routes för att hantera att en klient gör requests till vår server. Varje route definieras genom att ange HTTP-metod, sökväg och en funktion som körs när en klient gör en request.
**Exempel**
En route som svarar med `Hello World` på en GET-request till `'/'`
```javascript
app.get('/', (req, res) => {
res.send('Hello World!')
})
```
En route som hanterar en POST-request till `'/'`
```javascript
app.post('/', (req, res) => {
res.send('Got a POST request')
})
```
**Parametrar**
Om man anger en del av sökvägen med `:` får man den delen som en *parameter*.
```
Route path: /users/:userId/books/:bookId
Request URL: http://localhost:8080/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }
```
```javascript
app.get('/users/:userId/books/:bookId', (req, res) => {
res.send(req.params)
})
```
**Query-string**
Query-strängen är den del av url:en som inleds med ett `?` och innehåller variabelnamn och värden.
```
Route path: /users
Request URL: http://localhost:8080/users?username=johan&password=hunter2
req.query: { "username": "johan", "password": "hunter2" }
```
```javascript
app.get('/users', (req, res) => {
res.send(req.query)
})
```
**Body**
Vi kan också ta emot data i en request utan att det ligger i själva url:en, och istället i *body:n* av requesten. Den datan kan komma i olika format och beroende på format måste vi använda motsvarande så kallad *middleware* för att tolka datan. För JSON-format kan vi använda `express.json()`.
```javascript
app.use(express.json());
```
Då finns body:n som ett objekt i requesten.
```
Route path: /users
Request URL: http://localhost:8080/users
Body: '{ "username": "johan", "password": "hunter2" }'
```
```javascript
app.get('/users', (req, res) => {
res.send(req.body)
})
```