Girdiyi Doğrulama
Coddy'nin Node.js Journey'sinin REST API'leri bölümünün bir parçası. Ders 6 / 25.
İstemci, gövdede herhangi bir şey gönderebilir ve if (!name) yalnızca boş değerleri engeller. 123, true ve ["x"] doğruluk değeri taşır ve kontrolden geçer. Boşluklardan oluşan bir dize de geçer: trim() ile bunu yakalayın; çünkü ' '.trim() sonucu '' olur. Her alanın türünü typeof ile, ardından da sınırlarını kontrol edin:
const { seats } = req.body ?? {};
if (typeof seats !== 'number' || !Number.isInteger(seats) || seats < 1) {
return res.status(400).json({ error: 'seats must be a whole number from 1' });
}Yanıtı okuyacak kişi için mesajı yazın: alanı belirtin ve hangi değeri alması gerektiğini söyleyin ki neyi düzeltmesi gerektiğini bilsin. PATCH yalnızca gönderilen alanları kontrol eder, çünkü diğerleri değişmiyordur.
Görev
KolayŞu anda if (!title), 123 veya " " gibi başlıkların geçmesine izin veriyor. Kaydetmeden önce her alanın türünü ve boyutunu kontrol et.
routes/tasks.jsdosyasındaki POST rotasındatitlealanını kontrol et:- Bir metin olmalı.
- Boş ya da yalnızca boşluklardan oluşan bir değer olmamalı.
- Boşluklar dâhil en fazla 100 karakter uzunluğunda olmalı.
Bunlardan herhangi biri başarısız olursa 400 durum koduyla ve
titlesözcüğünü içeren birerrorcümlesiyle yanıt ver. Örneğin:{ "error": "title must be a string of 1 to 100 characters" }- PATCH rotasında yalnızca gövdenin gönderdiği alanları kontrol et:
titlegönderirse aynı kural ve aynı türde hata geçerlidir.donegönderirse değeritrueveyafalseolmalı. Aksi takdirde 400 durum koduyla vedonesözcüğünü içeren bir hatayla yanıt ver:
Reddedilen bir PATCH hiçbir şeyi değiştirmez.{ "error": "done must be true or false" } - Geçerli gövdeler çalışmaya devam eder: POST yine 201 döndürür ve
{ "done": true }ile yapılan PATCH yine 200 döndürür. PUT'u olduğu gibi bırak; Şemalar bunu zod kontrolleriyle de denetler.
Deneyin: /api/tasks adresine { "title": 123 } içeren bir POST gönder: title hatasıyla 400 alırsın. { "title": " " } içeren bir POST gönder: yine 400 alırsın. PATCH /api/tasks/2 isteğini { "done": "yes" } ile gönder: done hatasıyla 400 alırsın ve GET /api/tasks/2 hâlâ "done": false gösterir. PATCH /api/tasks/2 isteğini { "done": true } ile gönder: 200 alırsın.
Kendin dene
import { Router } from 'express';
import { nextId, tasks } from '../store.js';
const router = Router();
router.get('/', (req, res) => {
res.json(tasks);
});
router.get('/:id', (req, res) => {
const task = tasks.find((t) => t.id === Number(req.params.id));
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
res.json(task);
});
router.post('/', (req, res) => {
const { title } = req.body ?? {};
if (!title) {
return res.status(400).json({ error: 'title is required' });
}
const task = { id: nextId(), title, done: false, createdAt: new Date().toISOString() };
tasks.push(task);
res.status(201).location(`/api/tasks/${task.id}`).json(task);
});
router.patch('/:id', (req, res) => {
const task = tasks.find((t) => t.id === Number(req.params.id));
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
const { title, done } = req.body ?? {};
if (title !== undefined) task.title = title;
if (done !== undefined) task.done = done;
res.json(task);
});
router.put('/:id', (req, res) => {
const index = tasks.findIndex((t) => t.id === Number(req.params.id));
if (index === -1) {
return res.status(404).json({ error: 'Task not found' });
}
const { title, done } = req.body ?? {};
if (title === undefined || done === undefined) {
return res.status(400).json({ error: 'PUT needs every field: title and done' });
}
const { id, createdAt } = tasks[index];
tasks[index] = { id, title, done, createdAt };
res.json(tasks[index]);
});
router.delete('/:id', (req, res) => {
const index = tasks.findIndex((t) => t.id === Number(req.params.id));
if (index === -1) {
return res.status(404).json({ error: 'Task not found' });
}
tasks.splice(index, 1);
res.status(204).end();
});
export default router;
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
REST API'leri bölümündeki tüm dersler
1Kaynaklar ve Fiiller
Kaynaklar ve URL'lerPOST ile Oluşturma4Tarayıcılar, Sürümler ve Yapılandırma
Origin NedirBaşka Bir Origin'e İzin VermeCORSAPI'yi Çağıran Bir Sayfa2Doğrulama ve Hatalar
Girdiyi DoğrulamaKendi başına pratik yap: Express playground