Esercizio - Scrivere dati

Completato

L'azienda Tailwind Traders è favorevolmente impressionata dalle API, che restituiscono prodotti esistenti. È ora necessario creare un'API in grado di inserire e aggiornare i prodotti. I dati vengono in genere archiviati in un database e contengono milioni di record. Per questo motivo, è necessario usare tecniche che limitino la quantità di dati passati all'API e restituiti dall'API.

Implementare il supporto per scrivere dati

Implementare l'API CRUD nella risorsa products:

Questo progetto iniziale in nodejs-route\exercise-express-routing\reading-writing contiene i file di prodotto e il codice dell'applicazione iniziale. È sufficiente completare le parti mancanti.

  1. Fare clic con il pulsante destro del mouse sul nome della cartella di lettura/scrittura e scegliere Apri nel terminale integrato.

  2. Nel terminale eseguire il comando seguente per procedere all'installazione:

    npm install
    
  3. Aprire il file app.js per esaminarlo. Il file dovrebbe avere un aspetto simile a questo:

     const express = require('express');
     const app = express();
     const port = 3000;
    
     app.use(express.json());
    
     let products = [];
    
     app.post('/products', function (req, res) {
       // implement
     });
    
     app.put('/products', function (req, res) {
       // implement
     });
    
     app.delete('/products/:id', function (req, res) {
       // implement
     });
    
     app.get('/products', (req, res) => {
       // implement
     });
    
     app.listen(port, () =>
       console.log(`Example app listening at http://localhost:${port}`),
     );
    

    Il file app.js mostra lo scheletro di un programma. L'attività successiva consiste nell'implementare le route.

Implementare la route per leggere i dati

Per implementare le route, il processo consiste nell'aggiungere un piccolo frammento di codice e testarlo. Continuare ad aggiungere ciascun metodo di route fino a ottenere un'API completamente funzionale. Apportare le modifiche nel file app.js nella directory reading-writing. Tutti i file che iniziano con client sono applicazioni client che è possibile usare per testare l'API.

  1. Per supportare la lettura dall'API, individuare la parte del codice simile alla seguente:

    app.get('/products', (req, res) => {
      // implement
    })
    

    Sostituirla con questo codice:

    app.get('/products', (req, res) => {
      res.json(products);
    })
    
  2. Per verificare che il codice funzioni, avviare l'applicazione Node eseguendo questo comando:

    node app.js
    
  3. In un terminale separato per la stessa cartella, lettura/scrittura, eseguire il comando seguente. È importante avere due terminali aperti perché è necessario eseguire il server e il client contemporaneamente.

    node client-get.js
    

    Dovrebbe essere visualizzato l'output seguente:

    Received data []
    Connection closed
    

    L'API risponde con una matrice vuota perché non sono ancora stati scritti dati. Questo valore verrà successivamente modificato.

  4. Nel primo terminale selezionare CTRL+C per arrestare l'applicazione.

Implementare la route per scrivere dati

  1. Per implementare la scrittura di dati nel database in memoria, individuare questo codice:

    app.post('/products', function (req, res) {
       // implement
    });
    

    Sostituirla con questo codice:

    app.post('/products', function(req, res) {
      const newProduct = { ...req.body, id: products.length + 1 }
      products = [ ...products, newProduct]
      res.json(newProduct);
    });
    

    Il nuovo codice legge i dati in ingresso da req.body e crea un oggetto JavaScript da tali dati. Viene quindi aggiunto alla matrice del database in memoria products. Infine, il nuovo prodotto viene restituito all'utente.

  2. Per testare il codice, eseguire il programma server tramite questo comando:

    node app.js
    
  3. In un terminale separato per la stessa cartella, lettura/scrittura, eseguire il comando seguente. È importante avere due terminali aperti perché è necessario eseguire il server e il client contemporaneamente.

    node client-post.js
    

    Verrà visualizzato un output simile al seguente:

    response {"name":"product","id":1}
    Closed connection
    
  4. Per verificare che i dati siano stati scritti nell'API, eseguire il comando seguente:

    node client-get.js
    

    Verrà visualizzato l'output seguente:

    Received data [{"name":"product","id":1}]
    Connection closed
    

    Le richieste effettuate fino a questo momento:

    • client-post.js: la risposta indica che i dati sono stati scritti nell'API quando è stato eseguito client-post.js.
    • client-get.js: è stato eseguito client-get.js per eseguire query sull'API per i dati. L'API ha risposto con i dati appena scritti.
  5. Nel primo terminale selezionare CTRL+C per arrestare l'applicazione.

Implementare la route per aggiornare i dati

  1. Per implementare la possibilità di aggiornare i dati, individuare il codice simile al seguente:

    app.put('/products', function (req, res) {
      // implement
    });
    

    Sostituirla con questo codice:

    app.put('/products', function(req, res) {
      let updatedProduct;
      products = products.map(p => {
        if (p.id === req.body.id) {
          updatedProduct = { ...p, ...req.body };
          return updatedProduct;
        }
        return p;
      })
      res.json(updatedProduct);
    });
    

    Il nuovo codice individua il record nella matrice del database in memoria products corrispondente alla proprietà id e aggiorna tale record.

  2. Per testare il codice, avviare l'applicazione server:

    node app.js
    
  3. Nell'altro terminale eseguire questo comando per creare un record:

    node client-post.js
    
  4. Eseguire questo comando per aggiornare il record appena creato:

    node client-put.js
    

    Nel terminale verrà visualizzato l'aggiornamento seguente:

    response {"name":"product-updated","id":1}
    Closed connection
    
  5. Per verificare che l'aggiornamento venga effettivamente applicato, eseguire questo comando:

    node client-get.js
    

    Verrà visualizzato questo aggiornamento:

    Received data [{"name":"product-updated","id":1}]
    Connection closed
    
  6. Nel primo terminale selezionare CTRL+C per arrestare l'applicazione.

Implementare la route per eliminare i dati

  1. Per implementare l'eliminazione, individuare il codice simile al seguente:

    app.delete('/products/:id', function (req, res) {
      // implement
    });
    

    Sostituirla con questo codice:

    app.delete('/products/:id', function(req, res) {
      const deletedProduct = products.find(p => p.id === +req.params.id);
      products = products.filter(p => p.id !== +req.params.id);
      res.json(deletedProduct);
    });
    

    Il nuovo codice trova il prodotto da eliminare. Filtra quindi tale elemento dalla matrice del database in memoria products e restituisce il prodotto eliminato.

  2. Per testare il codice, avviare l'applicazione server:

    node app.js
    
  3. In un terminale separato eseguire questo comando per creare un record:

    node client-post.js
    
  4. Eseguire questo comando per rimuovere il record:

    node client-delete.js
    

    Verrà visualizzato l'output seguente:

    response {"name":"product","id":1}
    Closed connection
    
  5. Per verificare il codice, eseguire questo comando:

    node client-get.js
    

    Verrà fornito questo output:

    Received data []
    Connection closed
    

    Complimenti. È stata implementata una risorsa products usando un'istruzione CRUD completa (azioni di creazione, lettura, aggiornamento ed eliminazione).

  6. Nel primo terminale selezionare CTRL+C per arrestare l'applicazione.

Pulire il contenitore di sviluppo

Dopo aver completato il progetto, è possibile scegliere di pulire l'ambiente di sviluppo o riportarlo allo stato tipico.

L'eliminazione dell'ambiente GitHub Codespaces offre la possibilità di aumentare la quantità di ore gratuite del core a cui si ha diritto per l'account.

Importante

Per altre informazioni sui diritti dell'account GitHub, vedere Ore di archiviazione e di core mensili incluse in GitHub Codespaces.

  1. Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).

  2. Individuare i codespace attualmente in esecuzione provenienti dal repository GitHub MicrosoftDocs/node-essentials.

    Screenshot di tutti i codespace in esecuzione, inclusi il loro stato e i loro modelli.

  3. Aprire il menu di scelta rapida per il codespace e scegliere Elimina.

    Screenshot del menu di scelta rapida per un singolo codespace con l'opzione di eliminazione evidenziata.