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.
Sfida
FacileI 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.
- In
server.js, aggiungi una route per/api/recipes. Invia l'intero arrayrecipescome JSON. - Aggiungi una route per
/api/recipes/:id. Trova la ricetta come fa/recipes/:ide 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. - 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');
});
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