Udvikling af brugerdefineret Express-middleware
Skriv Deres egne Express-middlewarefunktioner for at udvide funktionaliteten og effektivisere behandlingen af requests.
Udvikling af brugerdefineret Express-middleware er en gratis Bootcamp i backendudvikling med Node.js-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Bootcamp i backendudvikling med Node.js, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Bootcamp i backendudvikling med Node.js-kurset indeholder 4 lektioner i alt.
Hvad er brugerdefineret middleware?
I Express.js fungerer middleware-funktioner som en kæde af hjælpere, der behandler indgående forespørgsler, før de når frem til din endelige rutebehandler.
- De har adgang til objekterne for forespørgslen (
req) og svaret (res). - De kan ændre disse objekter, afslutte forespørgsels-svar-cyklussen eller give kontrollen videre til den næste middleware.
- Brugerdefineret middleware giver dig mulighed for at tilføje specifik funktionalitet, der er tilpasset dit programs behov, f.eks. logning, godkendelse eller fortolkning af data.
Middleware-signaturen
Alle Express-middleware-funktioner følger en bestemt signatur: (req, res, next).
req(forespørgsel): Objektet for den indgående HTTP-forespørgsel.res(svar): HTTP-svarobjektet, som Express sender tilbage.next: En funktion, der, når den kaldes, giver kontrollen videre til den næste middleware-funktion i stakken. Hvis du ikke kaldernext(), stopper forespørgsels-svar-cyklussen, og ingen yderligere middleware eller rutebehandlere bliver kørt.
Din første lognings-middleware
Lad os oprette en simpel brugerdefineret middleware, der logger oplysninger om hver indgående forespørgsel til konsollen. Det hjælper med fejlfinding og overvågning.
Prøv at køre koden, og åbn derefter http://localhost:3000 i din browser. Kontrollér outputtet i konsollen!
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}`);
});Anvendelse af middleware: Globalt eller på en rute
Du kan anvende middleware på forskellige niveauer:
- Globalt (programniveau): Brug af
app.use(middlewareFunction)anvender middleware på ALLE indgående forespørgsler. - Rutespecifikt: Du kan anvende middleware på bestemte ruter eller grupper af ruter ved at sende den som argument før rutebehandleren.
Denne fleksibilitet giver dig mulighed for kun at udføre logik dér, hvor der er brug for den.
Videregivelse af data
En stærk egenskab ved middleware er muligheden for at føje egenskaber til req-objektet. Disse egenskaber bliver derefter tilgængelige for alle efterfølgende middleware-funktioner og den endelige rutehandler i anmodnings-svar-cyklussen.
Det er særdeles nyttigt til f.eks. at tilknytte brugeroplysninger efter godkendelse eller fortolkede data, før anmodningen når frem til hovedlogikken.
Eksempel: Tilknytning af brugerdata
Sådan kan du tilknytte et simuleret brugerobjekt til anmodningen. I en rigtig applikation ville disse data komme fra en database eller et afkodet JSON Web Token (JWT).
Bemærk, hvordan rutehandleren for /profile kan tilgå req.user direkte, fordi middleware-funktionen attachUserInfo blev kø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}`);
});Opbygning af middleware-kæder
Du kan kæde flere middleware-funktioner sammen. Express kører dem i den rækkefølge, de er defineret i. Hver middleware-funktion skal kalde next() for at give kontrollen videre til den næste.
- Det giver dig mulighed for at opdele kompleks behandling af anmodninger i mindre, overskuelige og genanvendelige funktioner.
- Du kan f.eks. have en middleware-funktion til godkendelse, derefter en til logning og så en til fortolkning – alt sammen før din endelige rutehandler.
Betinget kørsel af middleware
Nogle gange vil du kun have middleware til at køre under bestemte betingelser. Det kan du opnå ved at:
- anvende den på bestemte ruter: Som vist ved at anvende middleware direkte på
app.get(),app.post()osv. - bruge intern logik: Ved at tilføje betingede kontroller (
if-sætninger) i selve middleware-funktionen. - bruge brugerdefinerede wrapper-funktioner: Ved at oprette en funktion, der returnerer middleware baseret på parametre.
Praktisk: Middleware til måling af anmodningstid
Lad os opbygge en middleware-funktion, der måler, hvor lang tid det tager at behandle en anmodning og sende et svar. Det er meget nyttigt til overvågning af ydeevnen.
Dette eksempel bruger res.on('finish', ...) til at køre kode EFTER, 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}`);
});Quiz om middleware-funktioner
Forestil dig en brugerdefineret middleware-funktion, der er defineret som const myMiddleware = (req, res, next) => { /* ... */ };
Hvilken af følgende påstande om dens adfærd er SAND?
Opsamling: Brugerdefineret middleware
Du har lært at oprette og bruge brugerdefineret Express-middleware!
- Brugerdefinerede middleware-funktioner har signaturen
(req, res, next). - Det er afgørende at kalde
next()for at give kontrollen videre til den næste middleware-funktion eller rutehandler. - Middleware kan ændre objekterne
reqogres, så data bliver tilgængelige længere nede i kæden. - Du kan anvende middleware globalt med
app.use()eller på bestemte ruter. - Middleware er effektivt til at tilføje genanvendelig logik som logning, godkendelse eller måling af anmodningstid.
Det er afgørende at beherske brugerdefineret middleware for at kunne opbygge modulære og effektive Express-applikationer.
Lær JavaScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 22
- Lektioner
- 92
Ofte stillede spørgsmål
Er lektionen “Udvikling af brugerdefineret Express-middleware” gratis?
Ja — hele teksten til “Udvikling af brugerdefineret Express-middleware” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Bootcamp i backendudvikling med Node.js-kurset, skal du opgradere til CoddyKit PRO. Bootcamp i backendudvikling med Node.js-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Udvikling af brugerdefineret Express-middleware”?
Skriv Deres egne Express-middlewarefunktioner for at udvide funktionaliteten og effektivisere behandlingen af requests. Du øver dig i Bootcamp i backendudvikling med Node.js med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Bootcamp i backendudvikling med Node.js?
Der kræves ingen tidligere erfaring. Bootcamp i backendudvikling med Node.js på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Udvikling af brugerdefineret Express-middleware”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Bootcamp i backendudvikling med Node.js-lektion?
Ja. Alle Bootcamp i backendudvikling med Node.js-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Udvikling af brugerdefineret Express-middleware
- Strategier til global fejlhåndtering
- Inputvalidering med Joi/Express-Validator
- Authentication-middleware med JWT