Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Oprettelse af Brugerdefineret Middleware | Udvikling af Webapplikationer med Express.js
Backend-Udvikling med Node.js og Express.js

Oprettelse af Brugerdefineret Middleware

Stryg for at vise menuen

I Express.js kan vi oprette brugerdefinerede middleware-funktioner ved hjælp af app.use()-metoden. Disse funktioner tager tre parametre: req (request-objektet), res (response-objektet) og next (en funktion til at videregive kontrollen til den næste middleware i kæden). Brugerdefineret middleware kan anvendes globalt på alle ruter eller på specifikke ruter ved at angive en rute-sti.

Oprettelse af brugerdefineret middleware

Her er et grundlæggende eksempel på en brugerdefineret middleware-funktion, der logger tidsstemplet og URL'en for hver indkommende forespørgsel:

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

I dette eksempel logger den brugerdefinerede middleware tidsstemplet og URL'en for hver indkommende forespørgsel til konsollen. Funktionen next() kaldes for at videregive kontrollen til den næste middleware i rækken.

Virkelighedsnært eksempel: Kombinering af indbygget og brugerdefineret middleware

Her er et praktisk eksempel, hvor vi bruger en indbygget Express-middleware til at parse JSON-data og derefter opretter en brugerdefineret middleware til at validere disse data, før vi fortsætter:

const express = require('express');
const app = express();

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

I dette eksempel:

  • Vi bruger den indbyggede middleware express.json() til at parse indkommende JSON-data;
  • Vi opretter en brugerdefineret middleware, der tjekker, om de parset JSON-data mangler eller er tomme. Hvis de er det, sendes et 400 Bad Request-svar med en fejlbesked. Hvis dataene er gyldige, kaldes next() for at fortsætte til ruten;
  • Ruten /api/data forventer gyldige JSON-data. Hvis den brugerdefinerede middleware validerer dataene, modtager route handleren dem og sender et succes-svar.
Kodebeskrivelse
expand arrow
  • Linje 1: importerer Express.js-rammeværket;

  • Linje 2: opretter en Express-applikationsinstans ved at kalde express(). Det resulterende app-objekt bruges til at definere ruter, middleware og håndtere HTTP-forespørgsler;

  • Linje 5: aktiverer den indbyggede express.json() middleware. Denne middleware parser automatisk indkommende JSON-request bodies og gør dataene tilgængelige via req.body;

  • Linje 8-18: definerer brugerdefineret middleware, der bruges til at validere indkommende JSON-data;

  • tjekker om req.body indeholder data;

    • returnerer et 400 Bad Request-svar, hvis request body mangler eller er tom;
    • kalder next() hvis JSON-dataene er gyldige og fortsætter til næste middleware eller route handler;
  • Linje 21-24: definerer en POST-rute på /api/data;

    • henter de indsendte JSON-data fra req.body;
    • returnerer et 200 OK-svar med en bekræftelsesbesked og de modtagne data;
  • Linje 26-28: starter Express-applikationen og begynder at lytte efter forespørgsler på port 3000.

Dette eksempel demonstrerer, hvordan både indbygget og brugerdefineret middleware kan bruges til at validere data, før de når vores route handlers, hvilket sikrer at dataene har det forventede format, inden de behandles videre.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 9

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Oprettelse af Brugerdefineret Middleware

I Express.js kan vi oprette brugerdefinerede middleware-funktioner ved hjælp af app.use()-metoden. Disse funktioner tager tre parametre: req (request-objektet), res (response-objektet) og next (en funktion til at videregive kontrollen til den næste middleware i kæden). Brugerdefineret middleware kan anvendes globalt på alle ruter eller på specifikke ruter ved at angive en rute-sti.

Oprettelse af brugerdefineret middleware

Her er et grundlæggende eksempel på en brugerdefineret middleware-funktion, der logger tidsstemplet og URL'en for hver indkommende forespørgsel:

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

I dette eksempel logger den brugerdefinerede middleware tidsstemplet og URL'en for hver indkommende forespørgsel til konsollen. Funktionen next() kaldes for at videregive kontrollen til den næste middleware i rækken.

Virkelighedsnært eksempel: Kombinering af indbygget og brugerdefineret middleware

Her er et praktisk eksempel, hvor vi bruger en indbygget Express-middleware til at parse JSON-data og derefter opretter en brugerdefineret middleware til at validere disse data, før vi fortsætter:

const express = require('express');
const app = express();

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

I dette eksempel:

  • Vi bruger den indbyggede middleware express.json() til at parse indkommende JSON-data;
  • Vi opretter en brugerdefineret middleware, der tjekker, om de parset JSON-data mangler eller er tomme. Hvis de er det, sendes et 400 Bad Request-svar med en fejlbesked. Hvis dataene er gyldige, kaldes next() for at fortsætte til ruten;
  • Ruten /api/data forventer gyldige JSON-data. Hvis den brugerdefinerede middleware validerer dataene, modtager route handleren dem og sender et succes-svar.
Kodebeskrivelse
expand arrow
  • Linje 1: importerer Express.js-rammeværket;

  • Linje 2: opretter en Express-applikationsinstans ved at kalde express(). Det resulterende app-objekt bruges til at definere ruter, middleware og håndtere HTTP-forespørgsler;

  • Linje 5: aktiverer den indbyggede express.json() middleware. Denne middleware parser automatisk indkommende JSON-request bodies og gør dataene tilgængelige via req.body;

  • Linje 8-18: definerer brugerdefineret middleware, der bruges til at validere indkommende JSON-data;

  • tjekker om req.body indeholder data;

    • returnerer et 400 Bad Request-svar, hvis request body mangler eller er tom;
    • kalder next() hvis JSON-dataene er gyldige og fortsætter til næste middleware eller route handler;
  • Linje 21-24: definerer en POST-rute på /api/data;

    • henter de indsendte JSON-data fra req.body;
    • returnerer et 200 OK-svar med en bekræftelsesbesked og de modtagne data;
  • Linje 26-28: starter Express-applikationen og begynder at lytte efter forespørgsler på port 3000.

Dette eksempel demonstrerer, hvordan både indbygget og brugerdefineret middleware kan bruges til at validere data, før de når vores route handlers, hvilket sikrer at dataene har det forventede format, inden de behandles videre.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 9
some-alt