Esercizio - Scrivere dati
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.
Fare clic con il pulsante destro del mouse sul nome della cartella di lettura/scrittura e scegliere Apri nel terminale integrato.
Nel terminale eseguire il comando seguente per procedere all'installazione:
npm install
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.
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); })
Per verificare che il codice funzioni, avviare l'applicazione Node eseguendo questo comando:
node app.js
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.
Nel primo terminale selezionare CTRL+C per arrestare l'applicazione.
Implementare la route per scrivere dati
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 memoriaproducts
. Infine, il nuovo prodotto viene restituito all'utente.Per testare il codice, eseguire il programma server tramite questo comando:
node app.js
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
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.
Nel primo terminale selezionare CTRL+C per arrestare l'applicazione.
Implementare la route per aggiornare i dati
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.Per testare il codice, avviare l'applicazione server:
node app.js
Nell'altro terminale eseguire questo comando per creare un record:
node client-post.js
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
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
Nel primo terminale selezionare CTRL+C per arrestare l'applicazione.
Implementare la route per eliminare i dati
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.Per testare il codice, avviare l'applicazione server:
node app.js
In un terminale separato eseguire questo comando per creare un record:
node client-post.js
Eseguire questo comando per rimuovere il record:
node client-delete.js
Verrà visualizzato l'output seguente:
response {"name":"product","id":1} Closed connection
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).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.
Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).
Individuare i codespace attualmente in esecuzione provenienti dal repository GitHub
MicrosoftDocs/node-essentials
.Aprire il menu di scelta rapida per il codespace e scegliere Elimina.