Menu
CoddyTech

Risposte JSON

Fa parte della sezione Fondamenti di Express del percorso Node.js di Coddy. Lezione 6 di 23.

Un programma che chiama il tuo server ha bisogno di dati che possa leggere, non di una frase.

app.get('/api/weather', (req, res) => {
    res.json({ city: 'Oslo', temp: 4, rain: true });
});

JSON è un formato testuale per oggetti e array. res.json(value) converte il valore in JSON e imposta l’intestazione Content-Type su application/json; un’intestazione è una riga con un nome inviata insieme alla risposta, e questa indica il tipo di contenuto che segue. Il client riceve {"city":"Oslo","temp":4,"rain":true} e legge temp come un numero.

res.send con una stringa invia text/html, che un programma dovrebbe analizzare. Le route per i programmi di solito iniziano con /api, così le pagine e i dati non condividono mai lo stesso percorso.

challenge icon

Sfida

Facile

I programmi, come un'app per il telefono, hanno bisogno dei dati di Recipe Box in un formato che possano leggere. Aggiungi un'API JSON accanto alle pagine.

  1. In server.js, aggiungi una route per /api/recipes. Invia l'intero array recipes come JSON.
  2. Aggiungi una route per /api/recipes/:id. Trova la ricetta come fa /recipes/:id e invia l'intero oggetto della ricetta come JSON, non solo il suo titolo. Per la ricetta 2, si tratta dell'oggetto con "id": 2, "title": "Pancakes", "tags": ["breakfast", "sweet"] e il suo numero di porzioni.
  3. Se nessuna ricetta ha quell'id, rispondi con lo status 404. Puoi inviare il testo No such recipe, come fa la pagina.

Prova: premi «Gioca» e invia /api/recipes. Dovresti vedere un elenco di quattro ricette, che inizia con Tomato Soup. Invia /api/recipes/2: l'oggetto Pancakes. Invia /api/recipes/99: status 404. Nella scheda Headers, /api/recipes ha un Content-Type pari a application/json. Poi invia /about: il suo Content-Type è text/html, perché res.send con una stringa invia una pagina.

Provalo tu

import express from 'express';
import { recipes } from './data.js';

const app = express();

app.get('/', (req, res) => {
    res.send('Welcome to Recipe Box');
});

// type('text') invia testo semplice, quindi ogni titolo appare su una riga a sé.
app.get('/recipes', (req, res) => {
    const { tag } = req.query;
    const list = tag ? recipes.filter((recipe) => recipe.tags.includes(tag)) : recipes;
    res.type('text').send(list.map((recipe) => recipe.title).join('\n'));
});

app.get('/recipes/:id', (req, res) => {
    const recipe = recipes.find((r) => r.id === Number(req.params.id));
    if (!recipe) {
        res.status(404).send('No such recipe');
        return;
    }
    res.send(recipe.title);
});

app.get('/about', (req, res) => {
    res.send('Recipe Box collects family recipes.');
});

app.listen(3000, () => {
    console.log('Recipe Box is running on port 3000');
});
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti di Express

Esercitati da solo: Playground Express