Sorgu Dizeleri
Coddy'nin Node.js Journey'sinin Express Temelleri bölümünün bir parçası. Ders 5 / 23.
Bir liste sayfasında genellikle gösterilecek tarifler gibi seçeneklere ihtiyaç duyulur ve her seçenek için yeni bir rota oluşturmak çok fazla olur.
app.get('/books', (req, res) => {
const { author } = req.query;
res.send(author ? 'Books by ' + author : 'All books');
});Sorgu dizgesi, URL'de ? işaretinden sonra gelen bölümdür ve Express bunu bir nesne olan req.query içine koyar. const { author } = req.query, const author = req.query.author ifadesinin kısa yazımıdır. GET /books?author=Austen ifadesi req.query.author === 'Austen' sonucunu verir. ? yoksa değeri undefined olur. Birden fazla seçenek & ile birleştirilir: /books?author=Austen&year=1813.
Rota parametresi yolun bir parçasıdır ve tek bir şeyi adlandırır. Sorgu seçeneği ise bir listeyi filtreler veya sıralar ve kullanılmayabilir.
Görev
KolayZiyaretçiler, her etiket için yeni bir sayfa olmadan yalnızca vegan tarifleri veya yalnızca akşam yemeği tariflerini görmek istiyor.
server.jsdosyasında/recipesrotasını değiştirin. Sorgu dizesindentagseçeneğini okuyun.data.jsiçindeki her tariftetagslistesi bulunur; örneğin['vegan', 'soup'].- Bir etiket verildiğinde,
tagslistesinde bu etiket bulunan tariflerin yalnızca başlıklarını, rota şu anda yaptığı gibi her satırda bir başlık olacak şekilde gönderin. - Etiket verilmediğinde, daha önce olduğu gibi tüm başlıkları gönderin.
- Etikete sahip hiçbir tarif yoksa, 200 durum koduyla boş bir yanıt gönderin.
Deneyin: Run düğmesine basın ve /recipes?tag=vegan isteğini gönderin. İki satır görmelisiniz: Tomato Soup ve Lentil Curry. /recipes?tag=dinner isteğini gönderin: Lentil Curry ve Fish & Chips. /recipes?tag=dessert isteğini gönderin: bu etikete sahip hiçbir tarif olmadığından boş bir yanıt alırsınız. /recipes isteğini gönderin: dört başlığın tümü.
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) => {
res.type('text').send(recipes.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');
});
Express Temelleri bölümündeki tüm dersler
Kendi başına pratik yap: Express playground