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/routehandler
är functionen som exekveras när vi skickar en request, tar in argumentenreq
(request) ochres
(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
- ochresponse
-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);