Övning – Routnings- och frågeparametrar

Slutförd

Som tekniker för Tailwind Traders skapar du dina API:er för att vara effektiva både för servern och klienten genom att begränsa mängden data som skickas eller returneras från API:et.

Data finns vanligtvis i en databas eller annan lagring. Storleken på data kan vara enorm. När en användare ber om alla data för produkterna kan svaret vara tusentals eller till och med miljontals poster. En begäran som detta kan medföra en enorm belastning på en databas. Det tar också lång tid att hantera och återge svaret på klienten.

För att undvika det scenariot är det en bra idé att begränsa storleken på svaret:

  • Använda routningsparametrar för att be om en specifik post
  • Använd frågeparametrar till att ange en delmängd av poster.

I den här övningen lär du dig båda teknikerna.

Öppna projektet i utvecklingscontainern

  1. Starta processen för att skapa ett nytt GitHub Codespace på grenen main av MicrosoftDocs/node-essentials GitHub-lagringsplatsen.

  2. På sidan Skapa kodområde granskar du konfigurationsinställningarna för kodområdet och väljer sedan Skapa nytt kodområde

    Skärmbild av bekräftelseskärmen innan du skapar ett nytt kodområde.

  3. Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.

  4. Öppna en ny terminal i kodområdet.

    Dricks

    Du kan använda huvudmenyn för att navigera till menyalternativet Terminal och sedan välja alternativet Ny terminal .

    Skärmbild av menyalternativet codespaces för att öppna en ny terminal.

  5. Kontrollera att Node.js är installerat i din miljö:

    node --version
    
  6. Stäng terminalen.

  7. De återstående övningarna i det här projektet sker i samband med den här utvecklingscontainern.

Konfigurera filer för projektet

  1. Om du vill granska projektet för den här modulen öppnar du ./nodejs-http/exercise-express-routing/parameters mappen i kodredigeraren.

    Parameterkatalogen ska innehålla följande filer:

    Fil Syfte
    app.js Den här filen innehåller Express-programmet.
    package.json Den här filen innehåller beroenden för projektet.
    package-lock.json Den här filen innehåller de exakta versionerna av beroendena.
  2. Högerklicka på mappnamnet i utforskaren /nodejs-http/exercise-express-routing/parameters och välj Öppna i integrerad terminal.

  3. I terminalen kör du följande kommando för att installera projektets beroenden:

    npm install
    
  4. Öppna app.js för att kontrollera den. Filen bör se ut så här:

    const express = require('express')
    const app = express()
    const port = 3000
    
    const products = [
    {
      id: 1,
      name: "Ivanhoe",
      author: "Sir Walter Scott",
    },
    {
      id: 2,
      name: "Colour Magic",
      author: "Terry Pratchett",
    },
    {
      id: 3,
      name: "The Bluest eye",
      author: "Toni Morrison",
    },
    ];
    
    app.get('/', (req, res) => res.send('Hello API!'));
    
    app.get("/products/:id", (req, res) => {});
    
    app.get('/products', (req, res) => {});
    
    app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`));
    

    Den här JavaScript-koden skapar en grundläggande Express.js-server. Den definierar en matris med products och konfigurerar tre vägar: rot (/), /products/:idoch /products. Servern lyssnar på port 3000. Vägarna /products/:id och /products är platshållare utan funktioner ännu.

    Data är hårdkodade för att förenkla övningen. I ett verkligt scenario skulle data komma från en databas eller annan lagring.

Implementera produktväg för att returnera en enskild produkt

Koden innehåller ett Express-program. Nästa steg är att implementera två vägar:

  • /products/:id: Den här vägen ska returnera en enskild produkt.
  • /products: Den här vägen bör returnera alla produkter, eller så många produkter som frågar efter parametrar.
  1. Om du vill implementera vägen /products/:idletar du upp följande kod i filen app.js i parameterkatalogen:

    app.get("/products/:id", (req, res) => {});
    

    Ersätt den med den här koden:

    app.get("/products/:id", (req, res) => {
      res.json(products.find(p => p.id === +req.params.id));
    });
    
  2. Kör appen genom att köra följande kommando i terminalen:

    node app.js
    
  3. När Visual Studio Code visar meddelandet om att öppna webbläsaren väljer du Öppna i webbläsaren.

  4. Lägg till följande i slutet av URL:en:

    /products/1
    

    Resultatet är:

    {
      "id": 1,
      "name": "Ivanhoe",
      "author": "Sir Walter Scott"
    }
    

    Grattis! Du har implementerat vägen korrekt. Appen använder routningsparametern id för att hitta en specifik produkt.

  5. I terminalen väljer du Ctrl+C för att stoppa programmet.

Implementera produktväg för att returnera en lista över produkter

  1. Om du vill implementera vägen /productsletar du upp följande kod:

    app.get("/products", (req, res) => {});
    

    Ersätt den med den här koden:

    app.get("/products", (req, res) => {
      const page = +req.query.page;
      const pageSize = +req.query.pageSize;
    
      if (page && pageSize) {
        const start = (page - 1) * pageSize;
        const end = start + pageSize;
        res.json(products.slice(start, end));
      } else {
        res.json(products);
      }
    });
    
  2. Kör följande kommando i terminalen för att starta appen och testa koden:

    node app.js
    
  3. När Visual Studio Code visar meddelandet om att öppna webbläsaren väljer du Öppna i webbläsaren.

  4. Lägg till följande i slutet av URL:en:

    /products?page=1&pageSize=2
    

    Resultatet är:

    [{
      "id": 1,
      "name": "Ivanhoe",
      "author": "Sir Walter Scott"
    },
    {
      "id": 2,
      "name": "Colour Magic",
      "author": "Terry Pratchett"
    }]
    

    Svaret visar de första två av de tre posterna. Det här svaret innebär att frågeparametrarna page och pageSize, filtrerade ned svarsstorleken från den fullständiga listan till två objekt.

  5. Ändra URL:en så att den använder följande väg products?page=2&pageSize=2 för att ändra antalet sidor från en till två. Svaret är:

    [{
      "id": 3,
      "name": "The Bluest eye",
      "author": "Toni Morrison"
    }]
    

Eftersom koden bara innehåller tre poster bör den andra sidan endast innehålla en post.

  1. I terminalen väljer du Ctrl+C för att stoppa programmet.

Nu har du tillämpat frågeparametrar för att begränsa svaret.