---
# System prepended metadata

title: Guide Express

---

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