Menu
CoddyTech

JSON Yanıtları

Coddy'nin Node.js Journey'sinin Express Temelleri bölümünün bir parçası. Ders 6 / 23.

Sunucunuzu çağıran bir programın cümleye değil, okuyabileceği verilere ihtiyacı vardır.

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

JSON, nesneler ve diziler için bir metin biçimidir. res.json(value), değeri JSON'a dönüştürür ve Content-Type başlığını application/json olarak ayarlar; başlık, yanıtla birlikte gönderilen adlandırılmış bir satırdır ve bu başlık, ardından ne tür bir gövdenin geldiğini belirtir. İstemci {"city":"Oslo","temp":4,"rain":true} verisini alır ve temp değerini sayı olarak okur.

Bir dizeyle kullanılan res.send, text/html gönderir; bir programın bu içeriği ayrıştırması gerekir. Programlar için kullanılan rotalar genellikle /api ile başlar, böylece sayfalar ve veriler hiçbir zaman aynı yolu paylaşmaz.

challenge icon

Görev

Kolay

Telefon uygulaması gibi programların Recipe Box verilerine okuyabilecekleri bir biçimde ihtiyacı vardır. Sayfaların yanına bir JSON API ekle.

  1. server.js dosyasında /api/recipes için bir rota ekle. Bu rota recipes dizisinin tamamını JSON olarak gönderir.
  2. /api/recipes/:id için bir rota ekle. Tarifin tamamını yalnızca başlığını değil, JSON olarak gönderir ve tarifi /recipes/:id rotasındaki gibi bulur. 2 numaralı tarif için bu, "id": 2, "title": "Pancakes", "tags": ["breakfast", "sweet"] ve porsiyon sayısını içeren nesnedir.
  3. Bu kimliğe sahip bir tarif yoksa 404 durumuyla yanıt ver. Sayfanın yaptığı gibi No such recipe metnini gönderebilirsin.

Deneyin: “Oyna”ya bas ve /api/recipes isteğini gönder. Tomato Soup ile başlayan dört tariflik bir liste görmelisin. /api/recipes/2 isteğini gönder: Pancakes nesnesi. /api/recipes/99 isteğini gönder: 404 durumu. Headers sekmesinde /api/recipes için Content-Type değeri application/json olur. Ardından /about isteğini gönder: Content-Type değeri text/html olur; çünkü res.send bir metinle kullanıldığında bir sayfa gönderir.

Kendin dene

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

const app = express();

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

// type('text') düz metin gönderir, böylece her başlık ayrı bir satırda görünür.
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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Express Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Express playground