Codici di stato
Fa parte della sezione Fondamenti di Express del percorso Node.js di Coddy. Lezione 7 di 23.
Un programma legge il codice di stato prima del corpo, quindi un errore inviato con 200 sembra un successo.
app.get('/api/loans', (req, res) => {
if (!req.query.member) {
res.status(400).json({ error: 'Say which member' });
return;
}
res.json(loansOf(req.query.member));
});res.status(code) imposta lo stato e restituisce res, quindi .json(...) può seguire sulla stessa riga. return interrompe la funzione dopo l'errore. I codici che incontrerai più spesso:
- 200: ha funzionato (il valore predefinito).
- 201: è stato creato qualcosa.
- 400: la richiesta è errata, ad esempio manca un campo.
- 404: non c'è nulla a quel percorso o ID.
- 500: il server ha avuto un errore.
Sfida
FacileUn programma che legge la tua API controlla prima il codice di stato, poi il corpo. Rendi chiaro il caso di risorsa non trovata per entrambi.
- In
server.js, nella route/api/recipes/:id, modifica cosa succede quando nessuna ricetta ha quell'id. Mantieni lo stato 404, ma invia questo JSON invece del testo:{"error": "No such recipe"} - Anche un id che non è un numero, come
abc, non corrisponde ad alcuna ricetta. Restituisce lo stesso stato 404 e lo stesso JSON.
Prova: premi Esegui e invia /api/recipes/99. Dovresti vedere lo stato 404 e {"error":"No such recipe"}. Invia /api/recipes/abc: lo stesso stato 404 e lo stesso JSON. Invia /api/recipes/3: stato 200 e la ricetta Lentil Curry.
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 separata.
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('/api/recipes', (req, res) => {
res.json(recipes);
});
app.get('/api/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.json(recipe);
});
app.get('/about', (req, res) => {
res.send('Recipe Box collects family recipes.');
});
app.listen(3000, () => {
console.log('Recipe Box is running on port 3000');
});
Tutte le lezioni di Fondamenti di Express
2Risposte
Risposte JSONEsercitati da solo: Playground Express