Handler
- Dart kursu
- İleri seviye
- Ders 26/83
- 5 dk
shelf Handler ile istek işleme öğrenirsin.
Handler türü
shelf, handler'ı typedef Handler = FutureOr<Response> Function(Request) olarak tanımlar. Yani handler senkron (Response) ya da asenkron (Future<Response>) olabilir.
Senkron handler basit işler için uygundur: Response okHandler(Request r) => Response.ok('ok');.
Asenkron handler I/O için gerekir: Future<Response> dbHandler(Request r) async { var data = await fetch(); return Response.ok(data); }.
Request'ten bilgi okuma
Handler, Request parametresi üzerinden istek bilgilerini okur: req.method (GET, POST...), req.requestedUri.path, req.headers.
Gövde okumak asenkron: var body = await req.readAsString();. Bu, JSON veya form verisi ayrıştırmak için kullanılır.
Örnek: Response echoHandler(Request r) => Response.ok('yol: ${r.requestedUri.path}');. İstek yolunu yanıta yazar.
Uygulama İstek yolunu yankıla
import 'package:shelf/shelf.dart'; ekle. Response echoHandler(Request r) => Response.ok('yol: ${r.requestedUri.path}'); tanımla. main içinde var resp = echoHandler(Request('GET', Uri.parse('http://localhost/merhaba'))); ve print(await resp.readAsString()); ekle (main'i async yap).
Başlangıç kodu
void main() {
// shelf import ekle; echoHandler tanımla
// handler'ı /merhaba ile çağır; gövdeyi async oku ve yazdır
}Örnek çözüm
import 'package:shelf/shelf.dart';
Response echoHandler(Request r) => Response.ok('yol: ${r.requestedUri.path}');
void main() async {
var resp = echoHandler(Request('GET', Uri.parse('http://localhost/merhaba')));
print(await resp.readAsString());
}Beklenen çıktı
yol: /merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Async handler dönüş tipi
Future<____> dbHandler(Request r) async { ... }
Future<Response> dbHandler(Request r) async { ... }
Açıklama: async handler Future<Response> döndürür.
2 Handler senkron olabilir mi?
- Hayır, her zaman async
- Evet, Response döndürebilir Doğru cevap
- Yalnızca Future<Response>
- Yalnızca Stream<Response>
Açıklama: handler senkron Response da döndürebilir (FutureOr sayesinde).
3 Request parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
req.method |
GET/POST |
req.requestedUri |
URL |
req.headers |
Başlıklar |
req.readAsString |
Gövde |