Menu
CoddyTech

Statuscodes

Teil des Abschnitts Express-Grundlagen der Node.js-Journey von Coddy. Lektion 7 von 23.

Ein Programm liest den Statuscode vor dem Body. Daher sieht ein mit 200 gesendeter Fehler wie ein Erfolg aus.

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) setzt den Status und gibt res zurück, sodass .json(...) in derselben Zeile folgen kann. return beendet die Funktion nach dem Fehler. Die Codes, denen du am häufigsten begegnest:

  • 200: Es hat funktioniert (der Standardwert).
  • 201: Etwas wurde erstellt.
  • 400: Die Anfrage ist fehlerhaft, zum Beispiel wegen eines fehlenden Feldes.
  • 404: Unter diesem Pfad oder dieser ID ist nichts zu finden.
  • 500: Auf dem Server ist ein Fehler aufgetreten.
challenge icon

Aufgabe

Einfach

Ein Programm, das deine API ausliest, prüft zuerst den Statuscode und dann den Antworttext. Mach den Fall „nicht gefunden“ für beides eindeutig.

  1. Ändere in server.js in der Route /api/recipes/:id, was passiert, wenn kein Rezept die ID hat. Behalte den Status 404 bei, aber sende statt des Textes dieses JSON: {"error": "No such recipe"}
  2. Eine ID, die keine Zahl ist, wie abc, stimmt ebenfalls mit keinem Rezept überein. Sie erhält denselben Status 404 und dasselbe JSON.

Probiere es aus: Drücke auf „Ausführen“ und sende /api/recipes/99. Du solltest den Status 404 und {"error":"No such recipe"} sehen. Sende /api/recipes/abc: denselben Status 404 und dasselbe JSON. Sende /api/recipes/3: Status 200 und das Rezept Lentil Curry.

Probier es selbst

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

const app = express();

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

// type('text') sendet Klartext, sodass jeder Titel in einer eigenen Zeile erscheint.
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');
});

Alle Lektionen in Express-Grundlagen

Übe selbstständig: Express-Playground