Menu
CoddyTech

Codes d’état

Fait partie de la section Les bases d’Express du Journey Node.js de Coddy. Leçon 7 sur 23.

Un programme lit le code d’état avant le corps de la réponse : une erreur envoyée avec le code 200 ressemble donc à une réussite.

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) définit le statut et renvoie res, ce qui permet d’enchaîner .json(...) sur la même ligne. return arrête la fonction après l’erreur. Les codes que tu rencontreras le plus souvent :

  • 200 : tout a fonctionné (valeur par défaut).
  • 201 : une ressource a été créée.
  • 400 : la requête est incorrecte, par exemple s’il manque un champ.
  • 404 : rien ne se trouve à ce chemin ou à cet identifiant.
  • 500 : le serveur a échoué.
challenge icon

Défi

Facile

Un programme qui lit votre API vérifie d’abord le code d’état, puis le corps de la réponse. Indiquez clairement le cas où l’élément est introuvable dans les deux.

  1. Dans server.js, dans la route /api/recipes/:id, modifiez le comportement lorsqu’aucune recette ne possède cet identifiant. Conservez le statut 404, mais envoyez ce JSON au lieu du texte : {"error": "No such recipe"}
  2. Un identifiant qui n’est pas un nombre, comme abc, ne correspond à aucune recette non plus. Il renvoie le même statut 404 et le même JSON.

Essayez : Appuyez sur « Jouer » et envoyez /api/recipes/99. Vous devriez voir le statut 404 et {"error":"No such recipe"}. Envoyez /api/recipes/abc : le même statut 404 et le même JSON. Envoyez /api/recipes/3 : le statut 200 et la recette Lentil Curry.

Essayez vous-même

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

const app = express();

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

// type('text') envoie du texte brut, de sorte que chaque titre s’affiche sur sa propre ligne.
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');
});

Toutes les leçons de Les bases d’Express

Entraînez-vous par vous-même : Playground Express