Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Skapa Anpassad Mellanprogramvara | Utveckling av Webbapplikationer med Express.js
Backendutveckling med Node.js och Express.js

Skapa Anpassad Mellanprogramvara

Svep för att visa menyn

I Express.js kan vi skapa egna middleware-funktioner med hjälp av metoden app.use(). Dessa funktioner tar tre parametrar: req (request-objektet), res (response-objektet) och next (en funktion för att skicka kontrollen vidare till nästa middleware i kedjan). Egna middleware kan tillämpas globalt på alla rutter eller på specifika rutter genom att ange en ruttsökväg.

Skapa egen middleware

Här är ett grundläggande exempel på en egen middleware-funktion som loggar tidsstämpel och URL för varje inkommande förfrågan:

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 detta exempel loggar den egna middleware-funktionen tidsstämpel och URL för varje inkommande förfrågan till konsolen. Funktionen next() anropas för att skicka kontrollen vidare till nästa middleware i kedjan.

Exempel från verkligheten: Kombinera inbyggd och egen middleware

Här är ett praktiskt exempel där vi använder en inbyggd middleware i Express för att tolka JSON-data och sedan skapar en egen middleware för att validera denna data innan vi går vidare:

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 detta exempel:

  • Vi använder den inbyggda middleware-funktionen express.json() för att tolka inkommande JSON-data;
  • Vi skapar en egen middleware som kontrollerar om den tolkade JSON-datan saknas eller är tom. Om så är fallet skickas ett 400 Bad Request-svar med ett felmeddelande. Om datan är giltig anropas next() för att gå vidare till rutten;
  • Routen /api/data förväntar sig giltig JSON-data. Om den egna middleware-funktionen validerar datan tar route-hanteraren emot den och skickar ett lyckat svar.
Kodbeskrivning
expand arrow
  • Rad 1: importerar Express.js-ramverket;

  • Rad 2: skapar en Express-applikationsinstans genom att anropa express(). Det resulterande app-objektet används för att definiera rutter, middleware och hantera HTTP-förfrågningar;

  • Rad 5: aktiverar den inbyggda middleware-funktionen express.json(). Denna middleware tolkar automatiskt inkommande JSON-begäranden och gör datan tillgänglig via req.body;

  • Raderna 8-18: definierar anpassad middleware som används för att validera inkommande JSON-data;

  • kontrollerar om req.body innehåller data;

    • returnerar ett 400 Bad Request-svar om begärandekroppen saknas eller är tom;
    • anropar next() om JSON-datan är giltig och fortsätter till nästa middleware eller rutt-hanterare;
  • Raderna 21-24: definierar en POST-rutt på /api/data;

    • hämtar den inskickade JSON-datan från req.body;
    • returnerar ett 200 OK-svar med ett bekräftelsemeddelande och den mottagna datan;
  • Raderna 26-28: startar Express-applikationen och börjar lyssna efter förfrågningar på port 3000.

Detta exempel visar hur både inbyggd och anpassad middleware kan användas för att validera data innan den når våra rutt-hanterare, vilket säkerställer att datan har rätt format innan den behandlas vidare.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 9

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Skapa Anpassad Mellanprogramvara

I Express.js kan vi skapa egna middleware-funktioner med hjälp av metoden app.use(). Dessa funktioner tar tre parametrar: req (request-objektet), res (response-objektet) och next (en funktion för att skicka kontrollen vidare till nästa middleware i kedjan). Egna middleware kan tillämpas globalt på alla rutter eller på specifika rutter genom att ange en ruttsökväg.

Skapa egen middleware

Här är ett grundläggande exempel på en egen middleware-funktion som loggar tidsstämpel och URL för varje inkommande förfrågan:

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 detta exempel loggar den egna middleware-funktionen tidsstämpel och URL för varje inkommande förfrågan till konsolen. Funktionen next() anropas för att skicka kontrollen vidare till nästa middleware i kedjan.

Exempel från verkligheten: Kombinera inbyggd och egen middleware

Här är ett praktiskt exempel där vi använder en inbyggd middleware i Express för att tolka JSON-data och sedan skapar en egen middleware för att validera denna data innan vi går vidare:

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 detta exempel:

  • Vi använder den inbyggda middleware-funktionen express.json() för att tolka inkommande JSON-data;
  • Vi skapar en egen middleware som kontrollerar om den tolkade JSON-datan saknas eller är tom. Om så är fallet skickas ett 400 Bad Request-svar med ett felmeddelande. Om datan är giltig anropas next() för att gå vidare till rutten;
  • Routen /api/data förväntar sig giltig JSON-data. Om den egna middleware-funktionen validerar datan tar route-hanteraren emot den och skickar ett lyckat svar.
Kodbeskrivning
expand arrow
  • Rad 1: importerar Express.js-ramverket;

  • Rad 2: skapar en Express-applikationsinstans genom att anropa express(). Det resulterande app-objektet används för att definiera rutter, middleware och hantera HTTP-förfrågningar;

  • Rad 5: aktiverar den inbyggda middleware-funktionen express.json(). Denna middleware tolkar automatiskt inkommande JSON-begäranden och gör datan tillgänglig via req.body;

  • Raderna 8-18: definierar anpassad middleware som används för att validera inkommande JSON-data;

  • kontrollerar om req.body innehåller data;

    • returnerar ett 400 Bad Request-svar om begärandekroppen saknas eller är tom;
    • anropar next() om JSON-datan är giltig och fortsätter till nästa middleware eller rutt-hanterare;
  • Raderna 21-24: definierar en POST-rutt på /api/data;

    • hämtar den inskickade JSON-datan från req.body;
    • returnerar ett 200 OK-svar med ett bekräftelsemeddelande och den mottagna datan;
  • Raderna 26-28: startar Express-applikationen och börjar lyssna efter förfrågningar på port 3000.

Detta exempel visar hur både inbyggd och anpassad middleware kan användas för att validera data innan den når våra rutt-hanterare, vilket säkerställer att datan har rätt format innan den behandlas vidare.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 9
some-alt