Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lage Egendefinert Mellomvare | Utvikling av Webapplikasjoner med Express.js
Backend-Utvikling med Node.js og Express.js

bookLage Egendefinert Mellomvare

I Express.js kan vi lage egendefinerte middleware-funksjoner ved å bruke app.use()-metoden. Disse funksjonene tar tre parametere: req (forespørselsobjektet), res (responsobjektet) og next (en funksjon for å sende kontrollen videre til neste middleware i kjeden). Egendefinert middleware kan brukes globalt på alle ruter eller på spesifikke ruter ved å angi en rutevei.

Opprette egendefinert middleware

Her er et grunnleggende eksempel på en egendefinert middleware-funksjon som logger tidsstempel og URL for hver innkommende forespørsel:

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 eksemplet logger den egendefinerte middleware-funksjonen tidsstempelet og URL-en for hver innkommende forespørsel til konsollen. next()-funksjonen kalles for å sende kontrollen videre til neste middleware i kjeden.

Virkelig eksempel: Kombinere innebygd og egendefinert middleware

Her er et praktisk eksempel hvor vi bruker en innebygd Express-middleware for å tolke JSON-data og deretter lager en egendefinert middleware for å validere disse dataene før vi går videre:

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 eksemplet:

  • Vi bruker den innebygde middleware-funksjonen express.json() for å tolke innkommende JSON-data;
  • Vi lager en egendefinert middleware som sjekker om de tolkte JSON-dataene mangler eller er tomme. Hvis de er det, sendes en 400 Bad Request-respons med en feilmelding. Hvis dataene er gyldige, kalles next() for å gå videre til ruten;
  • Ruten /api/data forventer gyldige JSON-data. Hvis den egendefinerte middleware-funksjonen validerer dataene, mottar rutehåndtereren dem og sender en suksessrespons.

Dette eksemplet viser hvordan vi kan bruke både innebygd og egendefinert mellomvare for å validere data før de når våre rutehåndterere, og dermed sikre at dataene har forventet format før videre behandling.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 9

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain how to apply custom middleware to specific routes only?

What are some other use cases for custom middleware in Express.js?

How does the order of middleware affect request handling in Express.js?

bookLage Egendefinert Mellomvare

Sveip for å vise menyen

I Express.js kan vi lage egendefinerte middleware-funksjoner ved å bruke app.use()-metoden. Disse funksjonene tar tre parametere: req (forespørselsobjektet), res (responsobjektet) og next (en funksjon for å sende kontrollen videre til neste middleware i kjeden). Egendefinert middleware kan brukes globalt på alle ruter eller på spesifikke ruter ved å angi en rutevei.

Opprette egendefinert middleware

Her er et grunnleggende eksempel på en egendefinert middleware-funksjon som logger tidsstempel og URL for hver innkommende forespørsel:

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 eksemplet logger den egendefinerte middleware-funksjonen tidsstempelet og URL-en for hver innkommende forespørsel til konsollen. next()-funksjonen kalles for å sende kontrollen videre til neste middleware i kjeden.

Virkelig eksempel: Kombinere innebygd og egendefinert middleware

Her er et praktisk eksempel hvor vi bruker en innebygd Express-middleware for å tolke JSON-data og deretter lager en egendefinert middleware for å validere disse dataene før vi går videre:

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 eksemplet:

  • Vi bruker den innebygde middleware-funksjonen express.json() for å tolke innkommende JSON-data;
  • Vi lager en egendefinert middleware som sjekker om de tolkte JSON-dataene mangler eller er tomme. Hvis de er det, sendes en 400 Bad Request-respons med en feilmelding. Hvis dataene er gyldige, kalles next() for å gå videre til ruten;
  • Ruten /api/data forventer gyldige JSON-data. Hvis den egendefinerte middleware-funksjonen validerer dataene, mottar rutehåndtereren dem og sender en suksessrespons.

Dette eksemplet viser hvordan vi kan bruke både innebygd og egendefinert mellomvare for å validere data før de når våre rutehåndterere, og dermed sikre at dataene har forventet format før videre behandling.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 9
some-alt