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.
Görev
KolayTelefon uygulaması gibi programların Recipe Box verilerine okuyabilecekleri bir biçimde ihtiyacı vardır. Sayfaların yanına bir JSON API ekle.
server.jsdosyasında/api/recipesiçin bir rota ekle. Bu rotarecipesdizisinin tamamını JSON olarak gönderir./api/recipes/:idiçin bir rota ekle. Tarifin tamamını yalnızca başlığını değil, JSON olarak gönderir ve tarifi/recipes/:idrotasındaki gibi bulur. 2 numaralı tarif için bu,"id": 2,"title": "Pancakes","tags": ["breakfast", "sweet"]ve porsiyon sayısını içeren nesnedir.- Bu kimliğe sahip bir tarif yoksa 404 durumuyla yanıt ver. Sayfanın yaptığı gibi
No such recipemetnini 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');
});
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