Bu doküman ingilizce dokümana göre eski olabilir. Son güncellemeler için lütfen İngilizce Dokümanı. ziyaret edin
Express, kendine özgü minimal bir işlevselliği olan bir yönlendirme ve ara yazılım web çatısıdır: Bir Express uygulaması aslında bir dizi ara yazılım fonksiyon çağrısıdır.
Middleware fonksiyonları, uygulamanın istek-yanıt döngüsündeki istek objesi (req
), yanıt objesi (res
), ve bir sonraki ara yazılım fonksiyonuna erişebilen fonksiyonlardır. Bir sonraki ara yazılım fonksiyonu çoğunlukla next
isimli bir değişken ile tanımlanır.
Ara yazılım fonksiyonları aşağıdaki görevleri yapabilir:
Şimdiki ara yazılım fonksiyonu istek-yanıt döngüsünü bitirmezse, bir sonraki ara yazılım fonksiyonuna kontrol vermek için next()
metodunu çağırmalı. Aksi takdirde istek boşta asılı kalacaktır.
Bir Express uygulaması aşağıdaki ara yazılım türlerini kullanabilir:
Uygulama-düzeyi ve yönlendirici-düzeyi ara yazılımı bir opsiyonlu hedef yol ile yükleyebilirsiniz. Hedef bir yolda, bir ara katman yazılımı alt kümesi oluşturacak bir ara yazılım fonksiyonlar dizisi de yükleyebilirsiniz.
Uygulama-düzeyi ara yazılımı app.use()
ve app.METHOD()
fonksiyonları kullanarak bir uygulama objesi örneğine bağlanır; METHOD
ise, küçük harflerle, ara yazılım fonksiyonunun işlediği isteğin HTTP metodunun ismidir (örneğin GET, PUT, veya POST).
Bu örnek, hedef yolu bulunmayan bir ara yazılım fonksiyonunu gösteriyor. Fonksiyon uygulama her istek aldığında çalışır.
const app = express()
app.use((req, res, next) => {
console.log('Time:', Date.now())
next()
})
Bu örnek, /user/:id
yoluna yerleştirilmiş bir ara yazılım fonksiyonu gösterir. Bu fonksiyon /user/:id
yoluna yapılan herhangi bir HTTP isteğinde çalışır.
app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
Bu örnek bir rotayı ve işleyici fonksiyonunu gösterir (ara yazılım sistemi). Fonksiyon /user/:id
yoluna yapılan GET isteklerini karşılıyor.
app.get('/user/:id', (req, res, next) => {
res.send('USER')
})
Bu örnek, hedef bir yol ile, yerleştirilmiş bir noktada bir dizi ara yazılım fonksiyonları yükler.
/user/:id
yoluna yapılan herhangi bir tipte HTTP isteğinin istek bilgilerini yazdıran bir ara yazılım alt kümesini gösterir.
app.use('/user/:id', (req, res, next) => {
console.log('Request URL:', req.originalUrl)
next()
}, (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
Rota işleyicileri bir yol için birden fazla rota tanımlamaya olanak sağlar. Aşağıdaki örnek /user/:id
yoluna yapılan GET istekleri için iki rota tanımlıyor. İkinci rota herhangi bir problem yaratmayacak, ancak ilk rota istek-yanıt döngüsünü bitirdiği için ikinci rota hiç bir zaman çağrılmayacak.
Bu örnek /user/:id
yoluna yapılan GET isteklerini işleyen ara yazılım alt kümesini gösterir.
app.get('/user/:id', (req, res, next) => {
console.log('ID:', req.params.id)
next()
}, (req, res, next) => {
res.send('User Info')
})
// kullanıcı ID'sini yazdıran, /user/:id yolunun işleyicisi
app.get('/user/:id', (req, res, next) => {
res.end(req.params.id)
})
Geriye kalan ara yazılım fonksiyonlarını yönlendirici ara yazılım kümesinden es geçmek için, next('route')
metodunu çağırarak bir sonraki rotaya kontrolu verin.
NOT: next('route')
metodu sadece app.METHOD()
veya router.METHOD()
fonksiyonlarını kullanarak yüklenen ara yazılım fonksiyonları için geçerlidir.
Bu örnek /user/:id
yolu için yapılan GET isteklerini işleyen bir ara yazılım alt-kümesini gösterir.
app.get('/user/:id', (req, res, next) => {
// kullanıcı ID'si 0 ise, bir sonraki rotaya geç
if (req.params.id === '0') next('route')
// aksi takdirde kontrolü bu kümedeki bir sonraki ara yazılım fonksiyonuna ver
else next()
}, (req, res, next) => {
// normal bir sayfa göster
res.render('regular')
})
// özel bir sayfa gösteren, /user/:id yolunun işleyicisi
app.get('/user/:id', (req, res, next) => {
res.render('special')
})
Yönlendirici-düzeyi ara yazılımı, uygulama-düzeyi ara yazılımı ile aynı şekilde çalışır; ama express.Router()
sınıfının bir örneğine bağlıdır.
const router = express.Router()
router.use()
ve router.METHOD()
fonksiyonlarını kullanarak yönlendirici-düzeyi ara yazılımı yükle.
Aşağıdaki örnek kod, yukarıda uygulama-düzeyi ara yazılım için gösterilen ara yazılım sistemini, yönlendirici-düzeyi ara yazılım kullanarak kopyalar:
const app = express()
const router = express.Router()
// hedef yolu olmayan bir ara yazılım fonksiyonu. Bu kod yönlendiriciye yapılan her istekte çalışır
router.use((req, res, next) => {
console.log('Time:', Date.now())
next()
})
// /user/:id yolu için yapılan herhangi bir HTTP tipi isteğinin istek bilgilerini gösteren bir ara yazılım alt-kümesi
router.use('/user/:id', (req, res, next) => {
console.log('Request URL:', req.originalUrl)
next()
}, (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
// /user/:id yoluna yapılan GET isteklerini işleyen bir ara yazılım alt-kümesi
router.get('/user/:id', (req, res, next) => {
// kullanıcı ID'si 0 ise, bir sonraki yönlendiriciye geç
if (req.params.id === '0') next('route')
// aksi takdirde kontrolü bu kümedeki bir sonraki ara yazılıma ver
else next()
}, (req, res, next) => {
// normal bir sayfa göster
res.render('regular')
})
// özel bir sayfa gösteren /user/:id yolu işleyicisi
router.get('/user/:id', (req, res, next) => {
console.log(req.params.id)
res.render('special')
})
// yönlendiriciyi uygulamaya yerleştir
app.use('/', router)
Yönlendiricinin kalan ara yazılım fonksiyonlarını geçmek için, yönlendirici örneğinden kontrolü almak için next('router')
metodunu çağırın.
Bu örnek, /user/:id
yoluna yapılan GET isteklerini işleyen bir ara yazılım alt-kümesini gösterir.
const app = express()
const router = express.Router()
// yönlendiriciyi bir kontrol ile doğrula ve gerektiğinde bir sonraki yönlendiriciye geçerek kurtul
router.use((req, res, next) => {
if (!req.headers['x-auth']) return next('router')
next()
})
router.get('/', (req, res) => {
res.send('hello, user!')
})
// geçen herhangi bir şey için yönlendiriciyı ve 401'i kullan
app.use('/admin', router, (req, res) => {
res.sendStatus(401)
})
Hata-işleyici ara yazılımı her zaman dört argüman alır. Bir hata-işleyici ara yazılım fonksiyonunu tanımlayabilmek için dört argüman sağlamalısınız. next
objesini kullanmaya ihtiyacınız yoksa bile, metod imzasını koruyabilmek için tanımlamalısınız. Aksi takdirde, next
objesi normal bir ara yazılım gibi değerlendirilecek ve hataları işlemede başarısız olacaktır.
Hata-işleme ara yazılım fonksiyonlarını diğer ara yazılım fonksiyonları gibi tanımla, ancak istisna olarak üç argüman yerine 4 ile, özellikle (err, req, res, next)
imzasıyla:
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send('Bir şeyler bozuk!')
})
Hata-işleyici ara yazılım hakkında daha fazla detay için bakınız Hata-işleme.
4.x sürümünden başlayarak, Express Connect ara yazılımına bağımlı değil.
express.static
hariç, Express ile daha önce dahil edilen tüm ara katman yazılımı fonksiyonları artık ayrı modüllerde. Lütfen bakınız ara yazılım fonksiyonları listesi.
Express’teki tek gömülü ara yazılım fonksiyonu express.static
fonksiyonudur. Bu fonksiyon serve-static‘e dayanır, ve HTML dosyaları, görüntüler vb. gibi statik dosyaları sunmaktan sorumludur.
Fonksiyon imzası böyledir:
express.static(root, [options])
root
argümanı statik dosyaların sunulacağı kök dizini belirtir.
options
argümanı ve bu ara yazılım fonksiyonu hakkında daha detaylı bilgi için, bakınız express.static.
Bu örnek express.static
ara yazılım fonksiyonunu ayrıntılı bir seçenekler objesiyle kullanımını gösterir:
const options = {
dotfiles: 'ignore',
etag: false,
extensions: ['htm', 'html'],
index: false,
maxAge: '1d',
redirect: false,
setHeaders (res, path, stat) {
res.set('x-timestamp', Date.now())
}
}
app.use(express.static('public', options))
Her bir uygulama için birden fazla statik dizine sahip olabilirsiniz:
app.use(express.static('public'))
app.use(express.static('uploads'))
app.use(express.static('files'))
serve-static
fonksiyonu ve seçenekleri hakkında daha detaylı bilgi için, serve-static dökümantasyonuna bakınız.
Express uygulamalarına işlevsellik katmak için üçüncü-parti ara yazılım kullan.
Gerekli işlevsellik için Node.js modülünü indir, ve daha sonra uygulamana uygulama-düzeyinde veya yönlendirici-düzeyinde yükle.
Aşağıdaki örnek cookie-parser
çerez-ayrıştırma ara yazılım fonksiyonunu indirme ve yüklemeyi gösterir.
$ npm install cookie-parser
const express = require('express')
const app = express()
const cookieParser = require('cookie-parser')
// çerez-ayrıştırıcı ara yazılımı yükle
app.use(cookieParser())
Express ile yaygın olarak kullanılan üçüncü-parti ara yazılım fonksiyonlarının kısmi bir listesi için, bakınız: Üçüncü-parti ara yazılım.