Express.js, web ve mobil uygulamalar için sağlam bir dizi özellik sağlayan minimal ve esnek bir Node.js web uygulama framework'üdür. Sunucu tarafı uygulamaları ve API'leri oluşturmayı, HTTP isteklerini işlemeyi ve ara yazılımları yönetmeyi basitleştirir.
Express.js Yükleme ve Kurma Adımları:
Node.js'yi yükleyin:
Express.js, Node.js gerektirir. Zaten yüklü değilse Node.js'yi resmi web sitesinden indirin ve yükleyin.
Yeni Bir Proje Dizini Oluşturun:
Yeni Bir Node.js Projesi Başlatın:
Bu komut varsayılan ayarlarla bir package.json dosyası oluşturur.
Express.js'yi yükleyin:
Bu komut Express.js'yi yükler ve package.json dosyanıza bir bağımlılık olarak ekler.
Nodemon'u yükleyin:
nodemon, dosya değişiklikleri algılandığında uygulamanızı otomatik olarak yeniden başlatan bir araçtır.
package.json Komut dosyalarına nodemon ekleyin: package.json dosyasını açın ve script bölümünü içerecek şekilde değiştirin:
JavaScript için içe aktarma Syntax ayarlayın:
Node.js, ES6 modül Syntax (içe/dışa aktarma) varsayılan olarak doğrudan dosyalarda desteklemez. Bu özelliği “type” ekleyerek etkinleştirmeniz gerekir: package.json dosyanıza “module” ekleyerek bu özelliği etkinleştirmeniz gerekir.
package.json dosyasını içerecek şekilde değiştirin:
Giriş Noktası Dosyasını Oluşturun:
Proje dizininizde app.js (veya index.js) adında bir dosya oluşturun. Bu dosya Express uygulama kodunuzu içerecektir.
Temel Bir Express Uygulaması Oluşturma
Temel bir Express uygulaması oluşturmak için aşağıdaki adımları izleyin:
Express'i app.js içinde başlatın:
import express from 'express'; ES6 import sözdizimini kullanarak Express modülünü içe aktarır.
express() bir Express uygulamasını başlatır.
app.get() kök URL'ye (/) yönelik GET istekleri için bir rota işleyicisi tanımlar.
app.listen() sunucuyu başlatır ve belirtilen portta dinleme yapar.
Uygulamayı Çalıştırın:
Uygulamayı nodemon ile çalıştırmak için npm start kullanın:
Web tarayıcınızı açın ve http://localhost:3000 adresine gidin. “ Hello, World!” yazısının görüntülendiğini görmelisiniz.
Bu adımlarla, ES6 içe aktarma syntax kullanarak temel bir Express.js uygulaması kurdunuz ve nodemon'u geliştirme sırasında sunucuyu otomatik olarak yeniden başlatacak şekilde yapılandırdınız. Bu kurulum, geliştirmeyi kolaylaştırmaya ve kod değişikliklerini verimli bir şekilde ele almaya yardımcı olur.
Express.js'de Yönlendirme
Express.js'de yönlendirme, bir uygulamanın belirli uç noktalar için istemci isteklerine nasıl yanıt vereceğini tanımlama işlemidir. Rotalar farklı HTTP yöntemleri (GET, POST, PUT, DELETE, vb.) için tanımlanabilir ve karmaşık URL yapılarını işlemek için düzenlenebilir.
Temel GET Rotası
GET rotası sunucudan veri almak için kullanılır. Genellikle bir sorguya dayalı olarak statik içerik veya veri sunmak için kullanılır.
Örnek:
Temel POST Rotası
POST rotası sunucuya veri göndermek için kullanılır. Genellikle form göndermek veya yeni kaynaklar oluşturmak için kullanılır.
Örnek:
Temel PUT Rotası
PUT rotası, sunucudaki mevcut verileri güncellemek için kullanılır. Genellikle kaynakları değiştirmek veya kayıtları güncellemek için kullanılır.
Örnek:
Temel DELETE Rotası
DELETE rotası sunucudan veri kaldırmak için kullanılır. Kaynakları veya kayıtları silmek için kullanılır.
Örnek:
Express.js'de app.use
Express.js'deki app.use yöntemi, istekleri işleyen ara katman işlevlerini kaydetmek için kullanılır. Ara katman fonksiyonları tanımlandıkları sırayla çalıştırılır ve app.use, ara katman yazılımını global olarak veya belirli yollara uygulamak için kullanılabilir.
1. Ara Yazılımı Global Olarak Uygulama
app.use bir yol olmadan kullanıldığında, ara katman işlevi gelen tüm isteklere uygulanır. Bu, günlük kaydı, istek gövdelerini ayrıştırma veya oturumları işleme gibi genel işlevleri ayarlamak için kullanışlıdır.
Örnek:
Global Ara Yazılım: Ara katman işlevi, sunucu tarafından alınan her istek için istek URL'sini günlüğe kaydeder.
2. Belirli Yollara Ara Yazılım Uygulama
Ara yazılımı yalnızca belirli bir yolla eşleşen isteklere uygulamak için app.use kullanabilirsiniz. Bu, ara yazılımı belirli rotalara hedeflemenizi sağlar.
Örnek:
Yola Özel Ara Yazılım: Ara yazılım yalnızca /admin ile başlayan yollara yapılan istekler için bir mesaj günlüğe kaydeder.
3. app.use'u Birden Fazla Ara Yazılım İşleviyle Kullanma
Birden fazla ara katman işlevini app.use ile birbirine zincirleyerek isteklerin sıralı olarak işlenmesini sağlayabilirsiniz.
Örnek:
Zincirleme Ara Yazılım: firstMiddleware ve secondMiddleware tüm istekler için sırayla yürütülür.
Express.js'deki app.use yöntemi, ara katman işlevlerini global olarak veya belirli rotalara uygulamak ve istekleri modüler bir şekilde işlemek için esneklik sağlar.
Express.js'de Geri Çağırma Fonksiyonları
Express.js'de, geri arama fonksiyonları HTTP isteklerini işlemek için çok önemlidir. İstekleri işlemek ve yanıtları yönetmek için ara katman yazılımlarında ve rota işleyicilerinde kullanılırlar.
1. Geri Çağırma Fonksiyonlarındaki Parametreler
Express.js'deki geri arama fonksiyonları üç parametre alır:
req (İstek): Gelen istekle ilgili ayrıntıları içeren istek nesnesi.
res (Yanıt): İstemciye bir yanıt göndermek için kullanılan yanıt nesnesi.
next (Sonraki): Kontrolü bir sonraki ara katman yazılımına veya rota işleyicisine aktaran işlev.
Örnek:
2. Orta Yazılım Geri Çağırmaları
Ara katman işlevleri, istekleri rota işleyicilerine ulaşmadan önce işler. Req, res ve next parametrelerini kullanırlar.
Örnek:
3. Rota İşleyici Geri Çağırmaları
Rota işleyicileri, istekleri ve yanıtları yönetmek için geri arama parametrelerini kullanarak belirli rotalar için yanıtları tanımlar.
Örnek:
4. Orta Yazılım İşlevlerini Zincirleme
İstekleri sırayla işlemek için birden fazla ara katman işlevi birbirine zincirlenebilir.
Örnek:
Express.js'de Rota Parametreleri
Rota parametreleri, URL yolundan değerleri yakalamak için kullanılan bir URL'nin dinamik segmentleridir. Değişken girdileri işleyebilen rotalar tanımlamanıza izin vererek rotalarınızı daha esnek hale getirir.
1. Temel Rota Parametreleri
Rota parametreleri, rota yolunda iki nokta üst üste : ve ardından parametre adı kullanılarak tanımlanır. Bu parametrelere rota işleyicinizde req.params nesnesi aracılığıyla erişebilirsiniz.
Örnek:
Rota Parametresi: Rota yolundaki :id, req.params.id aracılığıyla erişilebilen URL'deki değeri yakalayan bir parametredir.
2. Çoklu Rota Parametreleri
Tek bir rota yolunda birden fazla rota parametresi tanımlayarak daha karmaşık URL yapılarına izin verebilirsiniz.
Örnek:
Çoklu Parametreler: Yıl, ay ve gün parametreleri, req.params.year, req.params.month ve req.params.day aracılığıyla erişilebilen URL'den tarihin bölümlerini yakalar.
3. İsteğe Bağlı Rota Parametreleri
Rota parametreleri de isteğe bağlı olabilir. Rota yolundaki isteğe bağlı segmentleri belirtmek için soru işareti ? kullanın.
Örnek:
İsteğe Bağlı Parametre: id? parametresi isteğe bağlıdır, yani rotaya bu parametre ile veya bu parametre olmadan erişilebilir.
Rota parametreleri, Express.js'de dinamik ve esnek rotalar oluşturmak için bir yol sağlayarak çeşitli girdi değerlerini işlemenize ve daha karmaşık URL modelleri oluşturmanıza olanak tanır.
req Object
Express.js'de req nesnesi, istemciden gelen HTTP isteğini temsil eder. URL, başlıklar ve gövde gibi istekle ilgili ayrıntıları içerir. Req nesnesini doğru anlamak, istekleri etkili bir şekilde ele almak için çok önemlidir.
req.body
req.body özelliği, genellikle POST ve PUT isteklerinde kullanılan istek gövdesinde gönderilen verileri içerir. req.body'ye erişmek için, istek verilerini ayrıştırmak üzere ara yazılım kullanmanız gerekir.
JSON Verilerini İşleme:
express.json(): İstek gövdelerindeki JSON verilerini ayrıştırmak için ara yazılım.
req.body: Ayrıştırılmış JSON verilerini içerir.
URL kodlu Verilerin İşlenmesi:
express.urlencoded({ extended: true }): Formlardan URL kodlu verileri ayrıştırmak için ara yazılım.
req.body: Ayrıştırılmış URL kodlu verileri içerir.
req.cookies
req.cookies özelliği, istemci tarafından gönderilen çerezleri içerir. req.cookies özelliğini kullanmak için, isteklerdeki çerezleri ayrıştırmak üzere çerez ayrıştırıcı ara katmanına ihtiyacınız vardır.
Örnek:
cookieParser(): İstek başlıklarından çerezleri ayrıştırmak için ara yazılım.
req.cookies: İstemci tarafından gönderilen çerezleri içerir.
req.method
req.method özelliği, gelen isteğin HTTP yöntemini içerir. Bu, GET, POST, PUT, DELETE vb. gibi farklı istek türlerini işlemek için yararlı olabilir.
Örnek:
req.method: İstek için kullanılan HTTP yöntemini içerir (örneğin, GET, POST).
req.params
req.params özelliği, URL yolunda belirtilen rota parametrelerini içerir. Rota parametreleri URL'den değerleri yakalamak için kullanılır ve genellikle iki nokta üst üste sözdizimine sahip rotalarda tanımlanır (örn. /users/:id).
Örnek:
req.params: Rota parametrelerinin anahtar-değer çiftlerini içerir; burada anahtar, rotada tanımlanan parametre adıdır ve değer, URL'deki gerçek değerdir.
req.query
req.query özelliği, URL'den sorgu dizesi parametrelerini içerir. Bunlar genellikle GET istekleri için URL'de veri iletmek için kullanılır.
Örnek:
req.query: Sorgu dizesi parametrelerinin anahtar-değer çiftlerini içerir. Örneğin, /search?q=example gibi bir URL için req.query.q 'example' olacaktır.
req.get()
req.get() yöntemi, gelen istekten HTTP başlıklarını almak için kullanılır. Belirli başlıklara ada göre erişmenizi sağlar. Bu, istekle ilgili meta verileri ayıklamak veya özel başlıkları işlemek için kullanışlıdır.
Örnek:
req.get('User-Agent'): İstemcinin tarayıcısı veya uygulaması hakkında bilgi sağlayan User-Agent başlığını alır.
req.get('Host'): Sunucunun alan adını ve bağlantı noktası numarasını gösteren Host başlığını alır.
req.get('Accept-Language'): Yanıt için tercih edilen dil(ler)i belirten Accept-Language başlığını alır.
req.get('Content-Type'): İstek gövdesinin ortam türünü belirten Content-Type başlığını alır.
res Object
Express.js'de res nesnesi, istemciye geri gönderilen HTTP yanıtını temsil eder. Yanıt başlıklarını, durum kodlarını ayarlamak ve istemciye veri veya dosyaları geri göndermek için kullanılır. Sunucudan gönderilen yanıtı kontrol etmek için res nesnesini anlamak çok önemlidir.
res.append()
res.append() yöntemi yanıta ek başlıklar eklemek için kullanılır. Yanıtı göndermeden önce başlıkları dinamik olarak değiştirmeniz veya eklemeniz gerektiğinde kullanışlıdır.
Örnek:
res.append(name, value): Yanıta belirtilen ad ve değere sahip bir başlık ekler. Başlık zaten mevcutsa, yeni değer mevcut değerlere eklenir.
res.cookie()
res.cookie() yöntemi, istemcinin tarayıcısında çerezleri ayarlamak için kullanılır. Süre sonu, yol ve güvenli bayraklar gibi belirli seçeneklere sahip çerezler göndermenizi sağlar.
Örnek:
res.cookie(name, value, [options]): Belirtilen ad ve değere sahip bir çerez ayarlar. Seçenekler parametresi şunları içerebilir:
maxAge: Çerezin milisaniye cinsinden sona erme süresi.
httpOnly: True ise, çerez JavaScript (istemci tarafı) üzerinden erişilebilir değildir.
secure: Güvenli: Doğruysa, çerez yalnızca HTTPS bağlantıları üzerinden gönderilir.
yol: Çerezin geçerli olduğu yol.
res.end()
res.end() yöntemi, yanıt sürecini sonlandırmak ve yanıtı istemciye göndermek için kullanılır. Genellikle son çıktıyı göndermek veya ek veri gönderilmesi gerekmediğinde yanıt akışını kapatmak için kullanılır.
Örnek:
res.end([data], [encoding]): Yanıt sürecini sonlandırır. Veri sağlanmışsa, yanıt gövdesi olarak gönderilir. Kodlama parametresi, veri için karakter kodlamasını belirtir. Herhangi bir veri sağlanmamışsa boş bir yanıt gönderilir.
res.json()
res.json() yöntemi, istemciye bir JSON yanıtı göndermek için kullanılır. Content-Type başlığını otomatik olarak application/json olarak ayarlar ve sağlanan verileri bir JSON dizesine dönüştürür.
Örnek:
res.json([body]): Bir JSON yanıtı gönderir. body parametresi, JSON dizesine dönüştürülecek ve yanıt gövdesi olarak gönderilecek bir nesne veya dizidir. Content-Type başlığı otomatik olarak application/json olarak ayarlanır.
res.location()
res.location() yöntemi yanıtın Konum başlığını ayarlar. Genellikle bir istemcinin yönlendirilmesi gereken URL'yi belirtmek için kullanılır. Ancak, bu yöntem kendi başına istemciye bir yanıt göndermez; yalnızca başlığı ayarlar.
Örnek:
res.location(url): Konum başlığını belirtilen URL'ye ayarlar. Bu genellikle istemcinin nereye yönlendirilmesi gerektiğini belirtmek için res.redirect ile birlikte kullanılır.
res.redirect()
res.redirect() yöntemi istemciye bir yönlendirme yanıtı gönderir. Location başlığını ayarlar ve istemciyi farklı bir URL'ye yönlendirmek için bir durum kodu (varsayılan 302'dir) gönderir.
Örnek:
res.redirect([status,] url): İstemciyi belirtilen URL'ye yönlendirir. İsteğe bağlı status parametresi, özel bir HTTP durum kodu ayarlamanıza olanak tanır (örneğin, kalıcı yönlendirme için 301, geçici yönlendirme için 302). Herhangi bir durum belirtilmezse, varsayılan olarak 302 kullanılır.
res.send()
res.send() yöntemi, istemciye bir yanıt göndermek için kullanılır. Dizeler, arabellekler, nesneler veya diziler dahil olmak üzere çeşitli yanıt türleri gönderebilir. Yöntem, yanıtın türüne göre Content-Type başlığını otomatik olarak ayarlar.
Örnek:
res.send([body]): Yanıtı istemciye gönderir. body parametresi bir dize, tampon, nesne veya dizi olabilir. Bir nesne veya dizi geçirilirse, otomatik olarak JSON'a dönüştürülür. Content-Type başlığı body parametresinin türüne göre ayarlanır.
res.sendFile()
res.sendFile() yöntemi, istemciye yanıt olarak bir dosya göndermek için kullanılır. Dosya türüne göre uygun Content-Type başlığını ayarlar ve dosyayı istemciye aktarır.
Örnek:
res.sendFile(path[, options], [callback]): Yanıt olarak bir dosya gönderir. path parametresi, göndermek istediğiniz dosyanın mutlak yoludur. İsteğe bağlı options parametresi, Content-Type başlığı gibi ek seçenekleri ayarlamak veya hataları işlemek için kullanılabilir. İsteğe bağlı geri arama parametresi, dosya gönderildiğinde çağrılan bir işlevdir.
res.sendStatus()
res.sendStatus() yöntemi HTTP durum kodunu ayarlar ve ilgili durum mesajını yanıt gövdesi olarak gönderir. Durum kodunu ayarlamak ve bir yanıtı tek adımda göndermek için kullanılan bir kısaltmadır.
Örnek:
res.sendStatus(statusCode): HTTP durum kodunu ayarlar ve koda karşılık gelen durum mesajıyla birlikte bir yanıt gönderir. Örneğin, 404 yanıt gövdesi olarak ' Not Found' (Bulunamadı) gönderecektir.
res.set()
res.set() yöntemi yanıt için HTTP başlıklarını ayarlar. Özel başlıklar da dahil olmak üzere çeşitli başlıkları belirtmek için kullanılabilir.
Örnek:
res.set(name, value): Tek bir HTTP başlığı ayarlar. name başlık adı, value ise başlık değeridir.
res.set(headers): Anahtarları başlık adları ve değerleri başlık değerleri olan bir nesne ileterek aynı anda birden fazla başlık ayarlar.
res.status()
res.status() yöntemi yanıt için HTTP durum kodunu ayarlar. Bu yöntem, yanıtı göndermeden önce durum kodunu tanımlamak için kullanılır.
Örnek:
res.status(statusCode): Yanıt için HTTP durum kodunu ayarlar. Durum kodu daha sonra yanıt gövdesini göndermek için diğer yöntemler (res.send, res.json vb. gibi) tarafından takip edilebilir.
Express.js Yükleme ve Kurma Adımları:
Node.js'yi yükleyin:
Express.js, Node.js gerektirir. Zaten yüklü değilse Node.js'yi resmi web sitesinden indirin ve yükleyin.
Yeni Bir Proje Dizini Oluşturun:
mkdir my-express-app
cd my-express-app
Yeni Bir Node.js Projesi Başlatın:
npm init -y
Bu komut varsayılan ayarlarla bir package.json dosyası oluşturur.
Express.js'yi yükleyin:
npm install express
Bu komut Express.js'yi yükler ve package.json dosyanıza bir bağımlılık olarak ekler.
Nodemon'u yükleyin:
nodemon, dosya değişiklikleri algılandığında uygulamanızı otomatik olarak yeniden başlatan bir araçtır.
npm install --save-dev nodemon
package.json Komut dosyalarına nodemon ekleyin: package.json dosyasını açın ve script bölümünü içerecek şekilde değiştirin:
"scripts": {
"start": "nodemon app.js"
}
JavaScript için içe aktarma Syntax ayarlayın:
Node.js, ES6 modül Syntax (içe/dışa aktarma) varsayılan olarak doğrudan dosyalarda desteklemez. Bu özelliği “type” ekleyerek etkinleştirmeniz gerekir: package.json dosyanıza “module” ekleyerek bu özelliği etkinleştirmeniz gerekir.
package.json dosyasını içerecek şekilde değiştirin:
"type": "module"
Giriş Noktası Dosyasını Oluşturun:
Proje dizininizde app.js (veya index.js) adında bir dosya oluşturun. Bu dosya Express uygulama kodunuzu içerecektir.
Temel Bir Express Uygulaması Oluşturma
Temel bir Express uygulaması oluşturmak için aşağıdaki adımları izleyin:
Express'i app.js içinde başlatın:
import express from 'express';
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
import express from 'express'; ES6 import sözdizimini kullanarak Express modülünü içe aktarır.
express() bir Express uygulamasını başlatır.
app.get() kök URL'ye (/) yönelik GET istekleri için bir rota işleyicisi tanımlar.
app.listen() sunucuyu başlatır ve belirtilen portta dinleme yapar.
Uygulamayı Çalıştırın:
Uygulamayı nodemon ile çalıştırmak için npm start kullanın:
npm start
Web tarayıcınızı açın ve http://localhost:3000 adresine gidin. “ Hello, World!” yazısının görüntülendiğini görmelisiniz.
Bu adımlarla, ES6 içe aktarma syntax kullanarak temel bir Express.js uygulaması kurdunuz ve nodemon'u geliştirme sırasında sunucuyu otomatik olarak yeniden başlatacak şekilde yapılandırdınız. Bu kurulum, geliştirmeyi kolaylaştırmaya ve kod değişikliklerini verimli bir şekilde ele almaya yardımcı olur.
Express.js'de Yönlendirme
Express.js'de yönlendirme, bir uygulamanın belirli uç noktalar için istemci isteklerine nasıl yanıt vereceğini tanımlama işlemidir. Rotalar farklı HTTP yöntemleri (GET, POST, PUT, DELETE, vb.) için tanımlanabilir ve karmaşık URL yapılarını işlemek için düzenlenebilir.
Temel GET Rotası
GET rotası sunucudan veri almak için kullanılır. Genellikle bir sorguya dayalı olarak statik içerik veya veri sunmak için kullanılır.
Örnek:
// Basic GET route
app.get('/home', (req, res) => {
res.send('Welcome to the Home Page!');
});
Temel POST Rotası
POST rotası sunucuya veri göndermek için kullanılır. Genellikle form göndermek veya yeni kaynaklar oluşturmak için kullanılır.
Örnek:
// Basic POST route
app.post('/submit', (req, res) => {
res.send('Form submitted!');
});
Temel PUT Rotası
PUT rotası, sunucudaki mevcut verileri güncellemek için kullanılır. Genellikle kaynakları değiştirmek veya kayıtları güncellemek için kullanılır.
Örnek:
// Basic PUT route
app.put('/update', (req, res) => {
res.send('Data updated!');
});
Temel DELETE Rotası
DELETE rotası sunucudan veri kaldırmak için kullanılır. Kaynakları veya kayıtları silmek için kullanılır.
Örnek:
// Basic DELETE route
app.delete('/delete', (req, res) => {
res.send('Data deleted!');
});
Express.js'de app.use
Express.js'deki app.use yöntemi, istekleri işleyen ara katman işlevlerini kaydetmek için kullanılır. Ara katman fonksiyonları tanımlandıkları sırayla çalıştırılır ve app.use, ara katman yazılımını global olarak veya belirli yollara uygulamak için kullanılabilir.
1. Ara Yazılımı Global Olarak Uygulama
app.use bir yol olmadan kullanıldığında, ara katman işlevi gelen tüm isteklere uygulanır. Bu, günlük kaydı, istek gövdelerini ayrıştırma veya oturumları işleme gibi genel işlevleri ayarlamak için kullanışlıdır.
Örnek:
// Middleware function applied globally
app.use((req, res, next) => {
console.log(`Request URL: ${req.url}`);
next(); // Pass control to the next handler
});
app.get('/', (req, res) => {
res.send('Home Page');
});
Global Ara Yazılım: Ara katman işlevi, sunucu tarafından alınan her istek için istek URL'sini günlüğe kaydeder.
2. Belirli Yollara Ara Yazılım Uygulama
Ara yazılımı yalnızca belirli bir yolla eşleşen isteklere uygulamak için app.use kullanabilirsiniz. Bu, ara yazılımı belirli rotalara hedeflemenizi sağlar.
Örnek:
// Middleware function applied to /admin paths
app.use('/admin', (req, res, next) => {
console.log('Admin route accessed');
next(); // Pass control to the next handler
});
app.get('/admin/dashboard', (req, res) => {
res.send('Admin Dashboard');
});
app.get('/user/profile', (req, res) => {
res.send('User Profile');
})
Yola Özel Ara Yazılım: Ara yazılım yalnızca /admin ile başlayan yollara yapılan istekler için bir mesaj günlüğe kaydeder.
3. app.use'u Birden Fazla Ara Yazılım İşleviyle Kullanma
Birden fazla ara katman işlevini app.use ile birbirine zincirleyerek isteklerin sıralı olarak işlenmesini sağlayabilirsiniz.
Örnek:
// First middleware function
const firstMiddleware = (req, res, next) => {
console.log('First Middleware');
next(); // Proceed to the next middleware
};
// Second middleware function
const secondMiddleware = (req, res, next) => {
console.log('Second Middleware');
next(); // Proceed to the next handler
};
// Apply multiple middleware functions
app.use(firstMiddleware, secondMiddleware);
app.get('/', (req, res) => {
res.send('Home Page');
});
Zincirleme Ara Yazılım: firstMiddleware ve secondMiddleware tüm istekler için sırayla yürütülür.
Express.js'deki app.use yöntemi, ara katman işlevlerini global olarak veya belirli rotalara uygulamak ve istekleri modüler bir şekilde işlemek için esneklik sağlar.
Express.js'de Geri Çağırma Fonksiyonları
Express.js'de, geri arama fonksiyonları HTTP isteklerini işlemek için çok önemlidir. İstekleri işlemek ve yanıtları yönetmek için ara katman yazılımlarında ve rota işleyicilerinde kullanılırlar.
1. Geri Çağırma Fonksiyonlarındaki Parametreler
Express.js'deki geri arama fonksiyonları üç parametre alır:
req (İstek): Gelen istekle ilgili ayrıntıları içeren istek nesnesi.
res (Yanıt): İstemciye bir yanıt göndermek için kullanılan yanıt nesnesi.
next (Sonraki): Kontrolü bir sonraki ara katman yazılımına veya rota işleyicisine aktaran işlev.
Örnek:
function callback(req, res, next) {
// Your code here
next(); // Pass control to the next middleware or route handler
}
2. Orta Yazılım Geri Çağırmaları
Ara katman işlevleri, istekleri rota işleyicilerine ulaşmadan önce işler. Req, res ve next parametrelerini kullanırlar.
Örnek:
const logMiddleware = (req, res, next) => {
console.log(`Request URL: ${req.url}`);
next(); // Pass control to the next handler
};
app.use(logMiddleware); // Apply middleware globally
app.get('/', (req, res) => {
res.send('Home Page');
});
3. Rota İşleyici Geri Çağırmaları
Rota işleyicileri, istekleri ve yanıtları yönetmek için geri arama parametrelerini kullanarak belirli rotalar için yanıtları tanımlar.
Örnek:
app.get('/example', (req, res) => {
res.send('Hello World!');
});
4. Orta Yazılım İşlevlerini Zincirleme
İstekleri sırayla işlemek için birden fazla ara katman işlevi birbirine zincirlenebilir.
Örnek:
const authenticate = (req, res, next) => {
console.log('Authentication middleware');
next(); // Proceed to the next middleware
};
const authorize = (req, res, next) => {
console.log('Authorization middleware');
next(); // Proceed to the route handler
};
app.get('/profile', authenticate, authorize, (req, res) => {
res.send('User Profile');
});
Express.js'de Rota Parametreleri
Rota parametreleri, URL yolundan değerleri yakalamak için kullanılan bir URL'nin dinamik segmentleridir. Değişken girdileri işleyebilen rotalar tanımlamanıza izin vererek rotalarınızı daha esnek hale getirir.
1. Temel Rota Parametreleri
Rota parametreleri, rota yolunda iki nokta üst üste : ve ardından parametre adı kullanılarak tanımlanır. Bu parametrelere rota işleyicinizde req.params nesnesi aracılığıyla erişebilirsiniz.
Örnek:
// Route with a route parameter
app.get('/user/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID: ${userId}`);
});
Rota Parametresi: Rota yolundaki :id, req.params.id aracılığıyla erişilebilen URL'deki değeri yakalayan bir parametredir.
2. Çoklu Rota Parametreleri
Tek bir rota yolunda birden fazla rota parametresi tanımlayarak daha karmaşık URL yapılarına izin verebilirsiniz.
Örnek:
// Route with multiple route parameters
app.get('/post/:year/:month/:day', (req, res) => {
const { year, month, day } = req.params;
res.send(`Post date: ${year}-${month}-${day}`);
});
Çoklu Parametreler: Yıl, ay ve gün parametreleri, req.params.year, req.params.month ve req.params.day aracılığıyla erişilebilen URL'den tarihin bölümlerini yakalar.
3. İsteğe Bağlı Rota Parametreleri
Rota parametreleri de isteğe bağlı olabilir. Rota yolundaki isteğe bağlı segmentleri belirtmek için soru işareti ? kullanın.
Örnek:
// Route with an optional route parameter
app.get('/product/:id?', (req, res) => {
const productId = req.params.id || 'not specified';
res.send(`Product ID: ${productId}`);
});
İsteğe Bağlı Parametre: id? parametresi isteğe bağlıdır, yani rotaya bu parametre ile veya bu parametre olmadan erişilebilir.
Rota parametreleri, Express.js'de dinamik ve esnek rotalar oluşturmak için bir yol sağlayarak çeşitli girdi değerlerini işlemenize ve daha karmaşık URL modelleri oluşturmanıza olanak tanır.
req Object
Express.js'de req nesnesi, istemciden gelen HTTP isteğini temsil eder. URL, başlıklar ve gövde gibi istekle ilgili ayrıntıları içerir. Req nesnesini doğru anlamak, istekleri etkili bir şekilde ele almak için çok önemlidir.
req.body
req.body özelliği, genellikle POST ve PUT isteklerinde kullanılan istek gövdesinde gönderilen verileri içerir. req.body'ye erişmek için, istek verilerini ayrıştırmak üzere ara yazılım kullanmanız gerekir.
JSON Verilerini İşleme:
Açıklama:app.use(express.json()); // Middleware to parse JSON bodies
app.post('/submit', (req, res) => {
const { name, age } = req.body;
res.send(`Received data - Name: ${name}, Age: ${age}`);
});
express.json(): İstek gövdelerindeki JSON verilerini ayrıştırmak için ara yazılım.
req.body: Ayrıştırılmış JSON verilerini içerir.
URL kodlu Verilerin İşlenmesi:
Açıklama:app.use(express.urlencoded({ extended: true })); // Middleware to parse URL-encoded bodies
app.post('/submit', (req, res) => {
const { name, age } = req.body;
res.send(`Received data - Name: ${name}, Age: ${age}`);
});
express.urlencoded({ extended: true }): Formlardan URL kodlu verileri ayrıştırmak için ara yazılım.
req.body: Ayrıştırılmış URL kodlu verileri içerir.
req.cookies
req.cookies özelliği, istemci tarafından gönderilen çerezleri içerir. req.cookies özelliğini kullanmak için, isteklerdeki çerezleri ayrıştırmak üzere çerez ayrıştırıcı ara katmanına ihtiyacınız vardır.
Örnek:
Açıklama:import cookieParser from 'cookie-parser';
app.use(cookieParser()); // Middleware to parse cookies
app.get('/check-cookies', (req, res) => {
const user = req.cookies.user; // Access a cookie named 'user'
res.send(`Cookie value - User: ${user}`);
});
cookieParser(): İstek başlıklarından çerezleri ayrıştırmak için ara yazılım.
req.cookies: İstemci tarafından gönderilen çerezleri içerir.
req.method
req.method özelliği, gelen isteğin HTTP yöntemini içerir. Bu, GET, POST, PUT, DELETE vb. gibi farklı istek türlerini işlemek için yararlı olabilir.
Örnek:
Açıklama:app.use((req, res, next) => {
console.log(`Request Method: ${req.method}`); // Logs the HTTP method of the request
next(); // Pass control to the next handler
});
app.get('/example', (req, res) => {
res.send(`This is a GET request`);
});
app.post('/example', (req, res) => {
res.send(`This is a POST request`);
});
req.method: İstek için kullanılan HTTP yöntemini içerir (örneğin, GET, POST).
req.params
req.params özelliği, URL yolunda belirtilen rota parametrelerini içerir. Rota parametreleri URL'den değerleri yakalamak için kullanılır ve genellikle iki nokta üst üste sözdizimine sahip rotalarda tanımlanır (örn. /users/:id).
Örnek:
Açıklama:app.get('/users/:id', (req, res) => {
const userId = req.params.id; // Access the route parameter 'id'
res.send(`User ID: ${userId}`);
});
req.params: Rota parametrelerinin anahtar-değer çiftlerini içerir; burada anahtar, rotada tanımlanan parametre adıdır ve değer, URL'deki gerçek değerdir.
req.query
req.query özelliği, URL'den sorgu dizesi parametrelerini içerir. Bunlar genellikle GET istekleri için URL'de veri iletmek için kullanılır.
Örnek:
Açıklama:app.get('/search', (req, res) => {
const query = req.query.q; // Access the query parameter 'q'
res.send(`Search query: ${query}`);
});
req.query: Sorgu dizesi parametrelerinin anahtar-değer çiftlerini içerir. Örneğin, /search?q=example gibi bir URL için req.query.q 'example' olacaktır.
req.get()
req.get() yöntemi, gelen istekten HTTP başlıklarını almak için kullanılır. Belirli başlıklara ada göre erişmenizi sağlar. Bu, istekle ilgili meta verileri ayıklamak veya özel başlıkları işlemek için kullanışlıdır.
Örnek:
Açıklama:app.get('/headers', (req, res) => {
const userAgent = req.get('User-Agent'); // Access the 'User-Agent' header
const host = req.get('Host'); // Access the 'Host' header
const acceptLanguage = req.get('Accept-Language'); // Access the 'Accept-Language' header
const contentType = req.get('Content-Type'); // Access the 'Content-Type' header
res.send(`
User-Agent: ${userAgent}<br>
Host: ${host}<br>
Accept-Language: ${acceptLanguage}<br>
Content-Type: ${contentType}
`);
});
req.get('User-Agent'): İstemcinin tarayıcısı veya uygulaması hakkında bilgi sağlayan User-Agent başlığını alır.
req.get('Host'): Sunucunun alan adını ve bağlantı noktası numarasını gösteren Host başlığını alır.
req.get('Accept-Language'): Yanıt için tercih edilen dil(ler)i belirten Accept-Language başlığını alır.
req.get('Content-Type'): İstek gövdesinin ortam türünü belirten Content-Type başlığını alır.
res Object
Express.js'de res nesnesi, istemciye geri gönderilen HTTP yanıtını temsil eder. Yanıt başlıklarını, durum kodlarını ayarlamak ve istemciye veri veya dosyaları geri göndermek için kullanılır. Sunucudan gönderilen yanıtı kontrol etmek için res nesnesini anlamak çok önemlidir.
res.append()
res.append() yöntemi yanıta ek başlıklar eklemek için kullanılır. Yanıtı göndermeden önce başlıkları dinamik olarak değiştirmeniz veya eklemeniz gerektiğinde kullanışlıdır.
Örnek:
Açıklama:app.get('/set-headers', (req, res) => {
res.append('Custom-Header', 'HeaderValue'); // Add a custom header
res.append('Another-Header', 'AnotherValue'); // Add another header
res.send('Headers have been set!');
});
res.append(name, value): Yanıta belirtilen ad ve değere sahip bir başlık ekler. Başlık zaten mevcutsa, yeni değer mevcut değerlere eklenir.
res.cookie()
res.cookie() yöntemi, istemcinin tarayıcısında çerezleri ayarlamak için kullanılır. Süre sonu, yol ve güvenli bayraklar gibi belirli seçeneklere sahip çerezler göndermenizi sağlar.
Örnek:
Açıklama:app.get('/set-cookie', (req, res) => {
// Set a cookie named 'username' with a value 'JohnDoe'
res.cookie('username', 'JohnDoe', {
maxAge: 24 * 60 * 60 * 1000, // Cookie expires after 1 day
httpOnly: true, // Cookie is not accessible via JavaScript
secure: false, // Cookie is sent over HTTP (not HTTPS)
path: '/' // Cookie is valid for the entire domain
});
res.send('Cookie has been set');
});
res.cookie(name, value, [options]): Belirtilen ad ve değere sahip bir çerez ayarlar. Seçenekler parametresi şunları içerebilir:
maxAge: Çerezin milisaniye cinsinden sona erme süresi.
httpOnly: True ise, çerez JavaScript (istemci tarafı) üzerinden erişilebilir değildir.
secure: Güvenli: Doğruysa, çerez yalnızca HTTPS bağlantıları üzerinden gönderilir.
yol: Çerezin geçerli olduğu yol.
res.end()
res.end() yöntemi, yanıt sürecini sonlandırmak ve yanıtı istemciye göndermek için kullanılır. Genellikle son çıktıyı göndermek veya ek veri gönderilmesi gerekmediğinde yanıt akışını kapatmak için kullanılır.
Örnek:
Açıklama:app.get('/finish', (req, res) => {
res.end('Response has been sent and the connection is closed.');
});
res.end([data], [encoding]): Yanıt sürecini sonlandırır. Veri sağlanmışsa, yanıt gövdesi olarak gönderilir. Kodlama parametresi, veri için karakter kodlamasını belirtir. Herhangi bir veri sağlanmamışsa boş bir yanıt gönderilir.
res.json()
res.json() yöntemi, istemciye bir JSON yanıtı göndermek için kullanılır. Content-Type başlığını otomatik olarak application/json olarak ayarlar ve sağlanan verileri bir JSON dizesine dönüştürür.
Örnek:
Açıklama:app.get('/data', (req, res) => {
const data = {
name: 'John Doe',
age: 30,
city: 'New York'
};
res.json(data);
});
res.json([body]): Bir JSON yanıtı gönderir. body parametresi, JSON dizesine dönüştürülecek ve yanıt gövdesi olarak gönderilecek bir nesne veya dizidir. Content-Type başlığı otomatik olarak application/json olarak ayarlanır.
res.location()
res.location() yöntemi yanıtın Konum başlığını ayarlar. Genellikle bir istemcinin yönlendirilmesi gereken URL'yi belirtmek için kullanılır. Ancak, bu yöntem kendi başına istemciye bir yanıt göndermez; yalnızca başlığı ayarlar.
Örnek:
Açıklama:app.get('/set-location', (req, res) => {
res.location('/new-url');
res.send('Location header has been set');
});
res.location(url): Konum başlığını belirtilen URL'ye ayarlar. Bu genellikle istemcinin nereye yönlendirilmesi gerektiğini belirtmek için res.redirect ile birlikte kullanılır.
res.redirect()
res.redirect() yöntemi istemciye bir yönlendirme yanıtı gönderir. Location başlığını ayarlar ve istemciyi farklı bir URL'ye yönlendirmek için bir durum kodu (varsayılan 302'dir) gönderir.
Örnek:
Açıklama:app.get('/redirect', (req, res) => {
res.redirect('/new-url');
});
res.redirect([status,] url): İstemciyi belirtilen URL'ye yönlendirir. İsteğe bağlı status parametresi, özel bir HTTP durum kodu ayarlamanıza olanak tanır (örneğin, kalıcı yönlendirme için 301, geçici yönlendirme için 302). Herhangi bir durum belirtilmezse, varsayılan olarak 302 kullanılır.
res.send()
res.send() yöntemi, istemciye bir yanıt göndermek için kullanılır. Dizeler, arabellekler, nesneler veya diziler dahil olmak üzere çeşitli yanıt türleri gönderebilir. Yöntem, yanıtın türüne göre Content-Type başlığını otomatik olarak ayarlar.
Örnek:
Açıklama:app.get('/text', (req, res) => {
res.send('This is a plain text response.');
});
app.get('/json', (req, res) => {
const data = { message: 'This is a JSON response.' };
res.send(data);
});
app.get('/buffer', (req, res) => {
const buffer = Buffer.from('This is a buffer response.');
res.send(buffer);
});
res.send([body]): Yanıtı istemciye gönderir. body parametresi bir dize, tampon, nesne veya dizi olabilir. Bir nesne veya dizi geçirilirse, otomatik olarak JSON'a dönüştürülür. Content-Type başlığı body parametresinin türüne göre ayarlanır.
res.sendFile()
res.sendFile() yöntemi, istemciye yanıt olarak bir dosya göndermek için kullanılır. Dosya türüne göre uygun Content-Type başlığını ayarlar ve dosyayı istemciye aktarır.
Örnek:
Açıklama:import path from 'path';
app.get('/file', (req, res) => {
const filePath = path.join(__dirname, 'public', 'example.txt');
res.sendFile(filePath);
});
res.sendFile(path[, options], [callback]): Yanıt olarak bir dosya gönderir. path parametresi, göndermek istediğiniz dosyanın mutlak yoludur. İsteğe bağlı options parametresi, Content-Type başlığı gibi ek seçenekleri ayarlamak veya hataları işlemek için kullanılabilir. İsteğe bağlı geri arama parametresi, dosya gönderildiğinde çağrılan bir işlevdir.
res.sendStatus()
res.sendStatus() yöntemi HTTP durum kodunu ayarlar ve ilgili durum mesajını yanıt gövdesi olarak gönderir. Durum kodunu ayarlamak ve bir yanıtı tek adımda göndermek için kullanılan bir kısaltmadır.
Örnek:
Açıklama:app.get('/status', (req, res) => {
res.sendStatus(404); // Sends a 404 Not Found status with the message 'Not Found'
});
res.sendStatus(statusCode): HTTP durum kodunu ayarlar ve koda karşılık gelen durum mesajıyla birlikte bir yanıt gönderir. Örneğin, 404 yanıt gövdesi olarak ' Not Found' (Bulunamadı) gönderecektir.
res.set()
res.set() yöntemi yanıt için HTTP başlıklarını ayarlar. Özel başlıklar da dahil olmak üzere çeşitli başlıkları belirtmek için kullanılabilir.
Örnek:
Açıklama:app.get('/headers', (req, res) => {
res.set('X-Custom-Header', 'Value');
res.set({
'Content-Type': 'application/json',
'X-Another-Header': 'AnotherValue'
});
res.send('Headers set');
});
res.set(name, value): Tek bir HTTP başlığı ayarlar. name başlık adı, value ise başlık değeridir.
res.set(headers): Anahtarları başlık adları ve değerleri başlık değerleri olan bir nesne ileterek aynı anda birden fazla başlık ayarlar.
res.status()
res.status() yöntemi yanıt için HTTP durum kodunu ayarlar. Bu yöntem, yanıtı göndermeden önce durum kodunu tanımlamak için kullanılır.
Örnek:
Açıklama:app.get('/error', (req, res) => {
res.status(500).send('Internal Server Error'); // Sets status code to 500 and sends the message
});
res.status(statusCode): Yanıt için HTTP durum kodunu ayarlar. Durum kodu daha sonra yanıt gövdesini göndermek için diğer yöntemler (res.send, res.json vb. gibi) tarafından takip edilebilir.