Link Search Menu Expand Document (external link)

AJ 1.2 Express.js

Table of contents


Vad är Express.js?

Express är det vanligaste och mest kända frameworket till Node. Det är open-source, och används till att bygga web-applikationer och APIs. Express används främst för att skriva routes och middleware funktioner, och gör detta väldigt enkelt.

Att använda Express

Installera med t.ex npm eller yarn, sen require eller import som vanligt. Spara sen Express i en variabel (vanligast app). Nu går det att använda metoder för att göra requests, eller använda middlewares etc.

Exempel i filen server.js

const express = require('express');
// or
import express from 'express';
// save  to variable
const app = express();
// listen to port 3000
const port = 3000;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

Kör lokalt

$ node server.js

Routing

Med routing menas hur en app svarar på klientens request till en viss endpoint och en viss request metod. Node har ingen egen inbyggd funktionalitet för specific hantering av olika request metoder (HTTP-verb som t.ex GET, POST etc), så där kommer Express in. Systemet är väldigt enkelt, och följer nedanstående struktur. 1 2

app.method(path, handler);
  • app är instansen av Express (se ovan)
  • method är en request metod (get, post, put etc)
  • path är en path/route
  • handler är functionen som exekveras när vi skickar en request, tar in argumenten req (request) och res (response)

Enkelt exempel på GET-request till appens root

app.get('/', (req, res) => {
  res.send('Hello World!');
});

Middleware

Med middleware menas funktionalitet som exekveras mellan olika program. Alla middlewares i Express har tillgång till request-och response-objekten i varje path/route, samt next som hänvisar till nästa middleware i kedjan. 3

Middleware funktioner kan alltså kortfattat utföra följande: 4

  • Exekvera kod
  • Göra förändringar till request- och response-objekten
  • Avsluta request-response cykeln
  • Kalla på nästa middleware funktion i stacken

Exempel på en middleware-kedja 4

Vi specificerar middleware som callback funktion med app.use().

app.use(
  (req, res, next) => {
    console.log('Request URL:', req.originalUrl);
    next();
  },
  (req, res, next) => {
    console.log('Request Type:', req.method);
    next();
  }
);

express.Router

Ett smidigt sätt att routa i Express är att använda sig av deras middleware Router.

import express from 'express';
const router = express.Router();

Då kan vi specificera grupper av routes under samma path/URI. Här är alla routes för varje basePath/URI i enskilda filer, de importeras till server.js och pathen definieras.

Importera routes

import authRoutes from './auth.routes';
import userRoutes from './user.routes';
import postRoutes from './post.routes';

Definiera paths

app.use('/api/auth', authRoutes);
app.use('/api/users', userRoutes);
app.use('/api/posts', postRoutes);

I filen user.routes.js så kommer nu alla paths att börja med /api/users. Vi kan sen specificera ytterligare nivåer, samt lägga till olika middlewares för olika endpoints.

Exempel

verifyToken och verifyOwner är custom middlewares, handler-funktionerna (getUser och updateUser) finns definierade i en controller och är här importerade och sparade till variabeln controller.

// get user by id
router.get('/:id', [verifyToken], controller.getUser);

// update user by id
router.put('/:id', [verifyToken, verifyOwner], controller.updateUser);

// get all posts by user id
router.get('/:id/posts', [verifyToken], controller.getPostsByUser);

Referenser