Ara Yazılım (Middleware)
Ara yazılım, bir istek tamamlanmadan önce kod çalıştırmanıza olanak tanır. Ardından, gelen isteğe bağlı olarak, yeniden yazarak, yönlendirerek, istek veya yanıt başlıklarını değiştirerek veya doğrudan yanıt vererek yanıtı değiştirebilirsiniz.
Ara yazılım, önbelleğe alınan içerik ve yollar eşleştirilmeden önce çalışır.
Convention
Middleware'i tanımlamak için projenizin kök dizinindeki middleware.ts
(veya .js
) dosyasını kullanın. Örneğin, pages
veya app
ile aynı seviyede veya varsa src
içinde.
Eşleşen Yollar (Matching Paths)
Ara yazılım, projenizdeki her rota için çağrılacaktır. Çalıştırma sırası aşağıdaki gibidir:
next.config.js
'denheaders
next.config.js
'denredirects
Ara yazılım (
rewrites
,redirects
, vb.)next.config.js
dosyasındanbeforeFiles
(rewrites
)Dosya sistemi rotaları (
public/
,_next/static/
,pages/
,app/
, vb.)next.config.js
dosyasındanafterFiles
(rewrites
)Dinamik Rotalar (
/blog/[slug]
)next.config.js
'denfallback
(rewrites
)
Eşleştirici (Matcher)
matcher
, Orta Yazılımı (middleware) belirli yollarda çalışacak şekilde filtrelemenize olanak tanır.
Bir dizi sözdizimiyle tek bir yolu veya birden fazla yolu eşleştirebilirsiniz:
matcher
yapılandırması tam regex'e izin verir, böylece negatif lookahead'ler veya karakter eşleştirme gibi eşleştirmeler desteklenir. Belirli yollar hariç tümünü eşleştirmek için negatif lookahead örneği burada görülebilir:
Bilmekte fayda var: matcher
değerlerinin sabit olması gerekir, böylece derleme zamanında statik olarak analiz edilebilirler. Değişkenler gibi dinamik değerler göz ardı edilecektir.
Yapılandırılmış eşleştiriciler:
ile başlamalıdır
/
Adlandırılmış parametreler içerebilir:
/about/:path
,/about/a
ve/about/b
ile eşleşir ancak/about/a/c
ile eşleşmezAdlandırılmış parametreler üzerinde değiştiricilere sahip olabilir (
:
ile başlayan):/about/:path*
/about/a/b/c
ile eşleşir çünkü*
sıfır veya daha fazladır.?
sıfır veya bir ve+
bir veya daha fazlaParantez içine alınmış düzenli ifade kullanabilir:
/about/(.x)
,/about/:pathx
ile aynıdır
Path-to-regexp belgeleri hakkında daha fazla bilgi edinin.
Bilmekte fayda var: Geriye dönük uyumluluk için Next.js her zaman /public
öğesini /public/index
olarak kabul eder. Bu nedenle, /public/:path
eşleştiricisi eşleşecektir.
Koşullu İfadeler (Conditional Statements)
NextResponse
NextResponse
API şunları yapmanıza olanak tanır:
gelen isteği farklı bir URL'ye yönlendirir.
belirli bir URL'yi görüntüleyerek yanıtı yeniden yazın
API Routes,
getServerSideProps
verewrite
hedefleri için istek üstbilgilerini ayarlamaYanıt çerezlerini ayarlama
Yanıt başlıklarını ayarlama
Middleware'den bir yanıt üretmek için şunları yapabilirsiniz:
Yanıt üreten bir rotaya (Sayfa veya Edge API Rotası) yeniden yazma
Doğrudan bir NextResponse döndürür.
Çerez Kullanımı (Using Cookies)
Çerezler normal başlıklardır. Bir İstekte, Cookie
başlığında saklanırlar. Yanıtta ise Set-Cookie
başlığında bulunurlar. Next.js, NextRequest
ve NextResponse
üzerindeki cookies
uzantısı aracılığıyla bu çerezlere erişmek ve bunları değiştirmek için uygun bir yol sağlar.
Gelen istekler için çerezler şu yöntemlerle birlikte gelir:
get
,getAll
,set
vedelete
çerezleri.has
ile bir çerezin varlığını kontrol edebilir veyaclear
ile tüm çerezleri kaldırabilirsiniz.Giden yanıtlar için, çerezler aşağıdaki
get
,getAll
,set
vedelete
yöntemlerine sahiptir.
Üstbilgileri Ayarlama (Setting Headers)
NextResponse
API'sini kullanarak istek ve yanıt başlıklarını ayarlayabilirsiniz (istek başlıklarının ayarlanması Next.js v13.0.0'dan beri mevcuttur).
Bilmekte fayda var: Arka uç web sunucusu yapılandırmanıza bağlı olarak 431 Request Header Fields Too Large hatasına neden olabileceğinden büyük başlıklar ayarlamaktan kaçının.
Yanıt Üretme (Producing a Response)
Bir Response
veya NextResponse
örneği döndürerek Middleware'den doğrudan yanıt verebilirsiniz. (Bu Next.js v13.1.0'dan beri mevcuttur)
Gelişmiş Orta Yazılım Bayrakları (Advanced Middleware Flags)
Next.js'nin v13.1
sürümünde, gelişmiş kullanım durumlarını ele almak için ara katman için skipMiddlewareUrlNormalize
ve skipTrailingSlashRedirect
olmak üzere iki ek bayrak tanıtıldı.
skipTrailingSlashRedirect
, sondaki eğik çizgilerin eklenmesi veya kaldırılması için Next.js varsayılan yönlendirmelerinin devre dışı bırakılmasına olanak tanıyarak, bazı yollar için sondaki eğik çizginin korunmasına izin verebilen ancak diğerleri için izin vermeyen ara yazılım içinde özel işleme izin verir.
skipMiddlewareUrlNormalize
, Next.js'nin doğrudan ziyaretleri ve istemci geçişlerini aynı şekilde ele almak için yaptığı URL normalleştirmesini devre dışı bırakmaya olanak tanır. Bunun kilidini açtığı orijinal URL'yi kullanarak tam kontrole ihtiyaç duyduğunuz bazı gelişmiş durumlar vardır.
Last updated