Bootcamp i backendutvikling med Node.js · leksjon

Utvikle egendefinert Express-middleware

Skriv Deres egne Express-middleware-funksjoner for å utvide funksjonaliteten og effektivisere behandlingen av forespørsler.

Leksjon 1 av 411 trinn

Utvikle egendefinert Express-middleware er en gratis leksjon i Bootcamp i backendutvikling med Node.js på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Bootcamp i backendutvikling med Node.js, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.

Hva er egendefinert middleware?

I Express.js fungerer middleware-funksjoner som en kjede av hjelpere som behandler innkommende forespørsler før de når den endelige rutehåndtereren.

  • De har tilgang til forespørselsobjektet (req) og svarobjektet (res).
  • De kan endre disse objektene, avslutte forespørsel–svar-syklusen eller overføre kontrollen til neste middleware.
  • Egendefinert middleware lar Dem legge til spesifikk funksjonalitet tilpasset behovene i applikasjonen Deres, for eksempel logging, autentisering eller datatolking.

Middleware-signaturen

Alle Express-middleware-funksjoner følger en bestemt signatur: (req, res, next).

  • req (request): Det innkommende HTTP-forespørselsobjektet.
  • res (response): HTTP-svarobjektet som Express sender tilbake.
  • next: En funksjon som, når den kalles, overfører kontrollen til neste middleware-funksjon i stakken. Hvis De ikke kaller next(), stopper forespørsel–svar-syklusen, og ingen flere middleware- eller rutehåndterere kjøres.

Deres første logger-middleware

La oss opprette en enkel egendefinert middleware som logger detaljer om hver innkommende forespørsel til konsollen. Dette hjelper med feilsøking og overvåking.

Prøv å kjøre koden og gå deretter til http://localhost:3000 i nettleseren. Kontroller konsollutdataene!

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

// Custom logging middleware
const requestLogger = (req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // Pass control to the next middleware/route handler
};

// Apply the custom middleware globally
app.use(requestLogger);

// Define a simple route
app.get('/', (req, res) => {
  res.send('Hello from Express!');
});

// Start the server
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

Bruke middleware: globalt eller for en rute

De kan bruke middleware på ulike nivåer:

  • Globalt (applikasjonsnivå): Ved å bruke app.use(middlewareFunction) brukes middleware-en på ALLE innkommende forespørsler.
  • Rutespesifikt: De kan bruke middleware på bestemte ruter eller grupper av ruter ved å sende den som et argument før rutehåndtereren.

Denne fleksibiliteten lar Dem kjøre logikk bare der det er nødvendig.

Sende data videre nedover

En kraftig egenskap ved middleware er muligheten til å legge til egenskaper i req-objektet. Disse egenskapene blir deretter tilgjengelige for alle påfølgende middleware-funksjoner og den endelige rutehåndtereren i forespørsel-respons-syklusen.

Dette er svært nyttig for ting som å legge ved brukerinformasjon etter autentisering eller analyserte data før forespørselen når hovedlogikken.

Eksempel: Legge ved brukerdata

Slik kan du legge et simulert brukerobjekt ved forespørselen. I en virkelig applikasjon ville disse dataene kommet fra en database eller et dekodet JSON Web Token (JWT).

Legg merke til hvordan rutehåndtereren for /profile kan få direkte tilgang til req.user fordi mellomvaren attachUserInfo ble kjørt først.

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

// Middleware to attach user info (mock data)
const attachUserInfo = (req, res, next) => {
  req.user = { id: '123', name: 'Alice', role: 'admin' };
  console.log('User info attached to request.');
  next();
};

// Apply the middleware globally
app.use(attachUserInfo);

// Route that uses the attached user info
app.get('/profile', (req, res) => {
  res.send(`Welcome, ${req.user.name}! Your role is: ${req.user.role}`);
});

app.get('/', (req, res) => {
  res.send('Home page (no user info explicitly needed here)');
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

Bygge middleware-kjeder

Du kan kjede sammen flere middleware-funksjoner. Express kjører dem i den rekkefølgen de er definert. Hver middleware må kalle next() for å overføre kontrollen til den neste.

  • Dette lar deg dele opp kompleks behandling av forespørsler i mindre, håndterbare og gjenbrukbare funksjoner.
  • Du kan for eksempel ha en middleware for autentisering, deretter en for logging og så en for parsing, før den endelige rutehåndtereren.

Betinget kjøring av middleware

Noen ganger ønsker du bare at middleware skal kjøre under bestemte betingelser. Dette kan du oppnå ved å:

  • Bruke den for en bestemt rute: Som vist ved å bruke middleware direkte i app.get(), app.post() og så videre.
  • Bruke intern logikk: Legge til betingede kontroller (if-setninger) i selve middleware-funksjonen.
  • Bruke egendefinerte wrapper-funksjoner: Opprette en funksjon som returnerer middleware basert på parametere.

Praktisk: Middleware for tidtaking av forespørsler

La oss bygge en middleware som måler hvor lang tid det tar å behandle en forespørsel og sende et svar. Dette er svært nyttig for ytelsesovervåking.

Dette eksempelet bruker res.on('finish', ...) til å kjøre kode ETTER at svaret er sendt til klienten.

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

// Middleware to measure request duration
const requestTimer = (req, res, next) => {
  const start = Date.now(); // Record start time
  res.on('finish', () => { // Listen for the response 'finish' event
    const end = Date.now(); // Record end time
    const duration = end - start;
    console.log(`${req.method} ${req.originalUrl} took ${duration}ms`);
  });
  next(); // Pass control
};

// Apply the timer middleware
app.use(requestTimer);

// Define a route that simulates some work
app.get('/slow', (req, res) => {
  setTimeout(() => {
    res.send('This was a slow response!');
  }, 500); // Simulate 500ms delay
});

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

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

Oppgave om middleware-funksjoner

Se for deg en egendefinert middleware-funksjon definert som const myMiddleware = (req, res, next) => { /* ... */ };

Hvilket av følgende utsagn om virkemåten er SANT?

Oppsummering av egendefinert middleware

Du har lært hvordan du oppretter og bruker egendefinert Express-middleware!

  • Egendefinerte middleware-funksjoner har signaturen (req, res, next).
  • Det er avgjørende å kalle next() for å overføre kontrollen til neste middleware eller rutehåndterer.
  • Middleware kan endre req- og res-objektene, slik at data blir tilgjengelige videre i kjeden.
  • Du kan bruke middleware globalt med app.use() eller på bestemte ruter.
  • Middleware er nyttig for å legge til gjenbrukbar logikk, som logging, autentisering eller tidtaking av forespørsler.

Å mestre egendefinert middleware er viktig for å bygge modulære og effektive Express-applikasjoner.

Gratis å komme i gang

Lær deg JavaScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
22
Leksjoner
92

Ofte stilte spørsmål

Er leksjonen «Utvikle egendefinert Express-middleware» gratis?

Ja – hele teksten i «Utvikle egendefinert Express-middleware» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Bootcamp i backendutvikling med Node.js-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.

Hva lærer jeg i «Utvikle egendefinert Express-middleware»?

Skriv Deres egne Express-middleware-funksjoner for å utvide funksjonaliteten og effektivisere behandlingen av forespørsler. Du øver på Bootcamp i backendutvikling med Node.js med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Bootcamp i backendutvikling med Node.js?

Ingen tidligere erfaring er nødvendig. Bootcamp i backendutvikling med Node.js på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Utvikle egendefinert Express-middleware»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Bootcamp i backendutvikling med Node.js-leksjonen?

Ja. Alle Bootcamp i backendutvikling med Node.js-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Utvikle egendefinert Express-middleware
  2. Strategier for global feilhåndtering
  3. Validering av inndata med Joi/Express-Validator
  4. Autentiseringsmiddleware med JWT
← Tilbake til Bootcamp i backendutvikling med Node.js