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